passagemath-gap-pkg-semigroups 10.6.30__cp311-cp311-macosx_13_0_arm64.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-apple-darwin23-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1158 -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.30.dist-info/METADATA +93 -0
- passagemath_gap_pkg_semigroups-10.6.30.dist-info/METADATA.bak +94 -0
- passagemath_gap_pkg_semigroups-10.6.30.dist-info/RECORD +354 -0
- passagemath_gap_pkg_semigroups-10.6.30.dist-info/WHEEL +6 -0
- passagemath_gap_pkg_semigroups-10.6.30.dist-info/top_level.txt +1 -0
- passagemath_gap_pkg_semigroups.dylibs/libsemigroups.2.dylib +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.cpython-311-darwin.so +0 -0
|
@@ -0,0 +1,741 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## greens/froidure-pin.gi
|
|
4
|
+
## Copyright (C) 2015-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 Green's relations and classes of semigroups
|
|
12
|
+
# that satisfy IsSemigroup and CanUseFroidurePin.
|
|
13
|
+
|
|
14
|
+
#############################################################################
|
|
15
|
+
##
|
|
16
|
+
## Contents:
|
|
17
|
+
##
|
|
18
|
+
## 1. Helper functions for the creation of Green's classes, and lambda-rho
|
|
19
|
+
## stuff.
|
|
20
|
+
##
|
|
21
|
+
## 2. Technical Green's stuff (types, representative, etc)
|
|
22
|
+
##
|
|
23
|
+
## 3. Green's relations
|
|
24
|
+
##
|
|
25
|
+
## 4. Individual Green's classes, and equivalence classes of Green's
|
|
26
|
+
## relations (constructors, size, membership)
|
|
27
|
+
##
|
|
28
|
+
## 5. Collections of Green's classes (GreensXClasses, XClassReps, NrXClasses)
|
|
29
|
+
##
|
|
30
|
+
## 6. Idempotents and NrIdempotents
|
|
31
|
+
##
|
|
32
|
+
## 7. Mapping etc
|
|
33
|
+
##
|
|
34
|
+
#############################################################################
|
|
35
|
+
|
|
36
|
+
#############################################################################
|
|
37
|
+
## The main idea is to store all of the information about all Green's classes
|
|
38
|
+
## of a particular type in the corresponding Green's relation. An individual
|
|
39
|
+
## Green's class only stores the index of the equivalence class corresponding
|
|
40
|
+
## to the Green's class, then looks everything up in the data contained in the
|
|
41
|
+
## Green's relation. The equivalence class data structures for R-, L-, H-,
|
|
42
|
+
## D-classes of a semigroup <S> that can compute a Froidure-Pin are stored in
|
|
43
|
+
## the !.data component of the corresponding Green's relation.
|
|
44
|
+
#############################################################################
|
|
45
|
+
|
|
46
|
+
#############################################################################
|
|
47
|
+
## 1. Helper functions for the creation of Green's classes/relations . . .
|
|
48
|
+
#############################################################################
|
|
49
|
+
|
|
50
|
+
# There are no methods for EquivalenceClassOfElementNC for Green's classes of
|
|
51
|
+
# semigroups that can compute Froidure-Pin because if we create a Green's class
|
|
52
|
+
# without knowing the Green's relations and the related strongly connected
|
|
53
|
+
# components data, then the Green's class won't have the correct type and won't
|
|
54
|
+
# have access to the correct methods.
|
|
55
|
+
|
|
56
|
+
SEMIGROUPS.EquivalenceClassOfElement := function(rel, rep, type)
|
|
57
|
+
local pos, out, S;
|
|
58
|
+
|
|
59
|
+
pos := PositionCanonical(Source(rel), rep);
|
|
60
|
+
if pos = fail then
|
|
61
|
+
ErrorNoReturn("the 2nd argument (a mult. elt.) does not belong to the ",
|
|
62
|
+
"source of the 1st argument (a Green's relation)");
|
|
63
|
+
fi;
|
|
64
|
+
|
|
65
|
+
out := rec();
|
|
66
|
+
S := Source(rel);
|
|
67
|
+
ObjectifyWithAttributes(out, type(S), EquivalenceClassRelation, rel,
|
|
68
|
+
Representative, rep, ParentAttr, S);
|
|
69
|
+
|
|
70
|
+
out!.index := rel!.data.id[pos];
|
|
71
|
+
|
|
72
|
+
return out;
|
|
73
|
+
end;
|
|
74
|
+
|
|
75
|
+
SEMIGROUPS.GreensXClasses := function(S,
|
|
76
|
+
GreensXRelation,
|
|
77
|
+
GreensXClassOfElement)
|
|
78
|
+
local comps, enum, out, C, i;
|
|
79
|
+
|
|
80
|
+
comps := GreensXRelation(S)!.data.comps;
|
|
81
|
+
enum := EnumeratorCanonical(S);
|
|
82
|
+
out := EmptyPlist(Length(comps));
|
|
83
|
+
|
|
84
|
+
for i in [1 .. Length(comps)] do
|
|
85
|
+
C := GreensXClassOfElement(S, enum[comps[i][1]]);
|
|
86
|
+
C!.index := i;
|
|
87
|
+
out[i] := C;
|
|
88
|
+
od;
|
|
89
|
+
return out;
|
|
90
|
+
end;
|
|
91
|
+
|
|
92
|
+
SEMIGROUPS.XClassReps := function(S, GreensXRelation)
|
|
93
|
+
local comps, enum, out, i;
|
|
94
|
+
|
|
95
|
+
comps := GreensXRelation(S)!.data.comps;
|
|
96
|
+
enum := EnumeratorCanonical(S);
|
|
97
|
+
out := EmptyPlist(Length(comps));
|
|
98
|
+
for i in [1 .. Length(comps)] do
|
|
99
|
+
out[i] := enum[comps[i][1]];
|
|
100
|
+
od;
|
|
101
|
+
return out;
|
|
102
|
+
end;
|
|
103
|
+
|
|
104
|
+
SEMIGROUPS.GreensXClassesOfClass := function(C,
|
|
105
|
+
GreensXRelation,
|
|
106
|
+
GreensXClassOfElement)
|
|
107
|
+
local S, comp, id, seen, enum, out, i;
|
|
108
|
+
|
|
109
|
+
S := Parent(C);
|
|
110
|
+
comp := EquivalenceClassRelation(C)!.data.comps[C!.index];
|
|
111
|
+
id := GreensXRelation(Parent(C))!.data.id;
|
|
112
|
+
seen := BlistList([1 .. Maximum(id)], []);
|
|
113
|
+
enum := EnumeratorCanonical(S);
|
|
114
|
+
out := EmptyPlist(Length(comp));
|
|
115
|
+
|
|
116
|
+
for i in comp do
|
|
117
|
+
if not seen[id[i]] then
|
|
118
|
+
seen[id[i]] := true;
|
|
119
|
+
C := GreensXClassOfElement(S, enum[i]);
|
|
120
|
+
C!.index := id[i];
|
|
121
|
+
Add(out, C);
|
|
122
|
+
fi;
|
|
123
|
+
od;
|
|
124
|
+
|
|
125
|
+
return out;
|
|
126
|
+
end;
|
|
127
|
+
|
|
128
|
+
SEMIGROUPS.XClassRepsOfClass := function(C, GreensXRelation)
|
|
129
|
+
local S, comp, id, seen, enum, out, i;
|
|
130
|
+
|
|
131
|
+
S := Parent(C);
|
|
132
|
+
comp := EquivalenceClassRelation(C)!.data.comps[C!.index];
|
|
133
|
+
id := GreensXRelation(Parent(C))!.data.id;
|
|
134
|
+
seen := BlistList([1 .. Maximum(id)], []);
|
|
135
|
+
enum := EnumeratorCanonical(S);
|
|
136
|
+
out := EmptyPlist(Length(comp));
|
|
137
|
+
|
|
138
|
+
for i in comp do
|
|
139
|
+
if not seen[id[i]] then
|
|
140
|
+
seen[id[i]] := true;
|
|
141
|
+
Add(out, enum[i]);
|
|
142
|
+
fi;
|
|
143
|
+
od;
|
|
144
|
+
|
|
145
|
+
return out;
|
|
146
|
+
end;
|
|
147
|
+
|
|
148
|
+
SEMIGROUPS.XClassIndex := C -> C!.index;
|
|
149
|
+
|
|
150
|
+
#############################################################################
|
|
151
|
+
## 2. Technical Green's classes stuff . . .
|
|
152
|
+
#############################################################################
|
|
153
|
+
|
|
154
|
+
# This should be removed after the library method for AsSSortedList for a
|
|
155
|
+
# Green's class is removed. The default AsSSortedList for a collection is what
|
|
156
|
+
# should be used (it is identical)!
|
|
157
|
+
|
|
158
|
+
InstallMethod(AsSSortedList, "for a Green's class",
|
|
159
|
+
[IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
|
|
160
|
+
C -> ConstantTimeAccessList(EnumeratorSorted(C)));
|
|
161
|
+
|
|
162
|
+
InstallMethod(Size,
|
|
163
|
+
"for a Green's class of a semigroup that CanUseFroidurePin",
|
|
164
|
+
[IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
|
|
165
|
+
function(C)
|
|
166
|
+
return Length(EquivalenceClassRelation(C)!.
|
|
167
|
+
data.comps[SEMIGROUPS.XClassIndex(C)]);
|
|
168
|
+
end);
|
|
169
|
+
|
|
170
|
+
InstallMethod(\in,
|
|
171
|
+
"for a mult. elt and a Green's class of a semigroup that CanUseFroidurePin",
|
|
172
|
+
[IsMultiplicativeElement,
|
|
173
|
+
IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
|
|
174
|
+
function(x, C)
|
|
175
|
+
local pos;
|
|
176
|
+
pos := PositionCanonical(Parent(C), x);
|
|
177
|
+
return pos <> fail
|
|
178
|
+
and EquivalenceClassRelation(C)!.data.id[pos] = SEMIGROUPS.XClassIndex(C);
|
|
179
|
+
end);
|
|
180
|
+
|
|
181
|
+
InstallMethod(DClassType, "for a semigroup with CanUseFroidurePin",
|
|
182
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
183
|
+
function(S)
|
|
184
|
+
return NewType(FamilyObj(S),
|
|
185
|
+
IsGreensClassOfSemigroupThatCanUseFroidurePinRep
|
|
186
|
+
and IsEquivalenceClassDefaultRep
|
|
187
|
+
and IsGreensDClass);
|
|
188
|
+
end);
|
|
189
|
+
|
|
190
|
+
InstallMethod(HClassType, "for a semigroup with CanUseFroidurePin",
|
|
191
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
192
|
+
function(S)
|
|
193
|
+
return NewType(FamilyObj(S),
|
|
194
|
+
IsGreensClassOfSemigroupThatCanUseFroidurePinRep
|
|
195
|
+
and IsEquivalenceClassDefaultRep
|
|
196
|
+
and IsGreensHClass);
|
|
197
|
+
end);
|
|
198
|
+
|
|
199
|
+
InstallMethod(LClassType, "for a semigroup with CanUseFroidurePin",
|
|
200
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
201
|
+
function(S)
|
|
202
|
+
return NewType(FamilyObj(S),
|
|
203
|
+
IsGreensClassOfSemigroupThatCanUseFroidurePinRep
|
|
204
|
+
and IsEquivalenceClassDefaultRep
|
|
205
|
+
and IsGreensLClass);
|
|
206
|
+
end);
|
|
207
|
+
|
|
208
|
+
InstallMethod(RClassType, "for a semigroup with CanUseFroidurePin",
|
|
209
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
210
|
+
function(S)
|
|
211
|
+
return NewType(FamilyObj(S),
|
|
212
|
+
IsGreensClassOfSemigroupThatCanUseFroidurePinRep
|
|
213
|
+
and IsEquivalenceClassDefaultRep
|
|
214
|
+
and IsGreensRClass);
|
|
215
|
+
end);
|
|
216
|
+
|
|
217
|
+
#############################################################################
|
|
218
|
+
## 3. Green's relations
|
|
219
|
+
#############################################################################
|
|
220
|
+
|
|
221
|
+
# same method for ideals
|
|
222
|
+
|
|
223
|
+
InstallMethod(GreensRRelation, "for a semigroup with CanUseFroidurePin",
|
|
224
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
225
|
+
function(S)
|
|
226
|
+
local fam, data, filt, rel;
|
|
227
|
+
if IsActingSemigroup(S) or (HasIsFinite(S) and not IsFinite(S)) then
|
|
228
|
+
TryNextMethod();
|
|
229
|
+
fi;
|
|
230
|
+
fam := GeneralMappingsFamily(ElementsFamily(FamilyObj(S)),
|
|
231
|
+
ElementsFamily(FamilyObj(S)));
|
|
232
|
+
data := DigraphStronglyConnectedComponents(RightCayleyDigraph(S));
|
|
233
|
+
filt := IsGreensRelationOfSemigroupThatCanUseFroidurePinRep;
|
|
234
|
+
rel := Objectify(NewType(fam,
|
|
235
|
+
IsEquivalenceRelation
|
|
236
|
+
and IsEquivalenceRelationDefaultRep
|
|
237
|
+
and IsGreensRRelation
|
|
238
|
+
and filt),
|
|
239
|
+
rec(data := data));
|
|
240
|
+
SetSource(rel, S);
|
|
241
|
+
SetRange(rel, S);
|
|
242
|
+
SetIsLeftSemigroupCongruence(rel, true);
|
|
243
|
+
|
|
244
|
+
return rel;
|
|
245
|
+
end);
|
|
246
|
+
|
|
247
|
+
# same method for ideals
|
|
248
|
+
|
|
249
|
+
InstallMethod(GreensLRelation, "for a semigroup with CanUseFroidurePin",
|
|
250
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
251
|
+
function(S)
|
|
252
|
+
local fam, data, filt, rel;
|
|
253
|
+
if IsActingSemigroup(S) or (HasIsFinite(S) and not IsFinite(S)) then
|
|
254
|
+
TryNextMethod();
|
|
255
|
+
fi;
|
|
256
|
+
fam := GeneralMappingsFamily(ElementsFamily(FamilyObj(S)),
|
|
257
|
+
ElementsFamily(FamilyObj(S)));
|
|
258
|
+
data := DigraphStronglyConnectedComponents(LeftCayleyDigraph(S));
|
|
259
|
+
filt := IsGreensRelationOfSemigroupThatCanUseFroidurePinRep;
|
|
260
|
+
rel := Objectify(NewType(fam,
|
|
261
|
+
IsEquivalenceRelation
|
|
262
|
+
and IsEquivalenceRelationDefaultRep
|
|
263
|
+
and IsGreensLRelation
|
|
264
|
+
and filt),
|
|
265
|
+
rec(data := data));
|
|
266
|
+
SetSource(rel, S);
|
|
267
|
+
SetRange(rel, S);
|
|
268
|
+
SetIsRightSemigroupCongruence(rel, true);
|
|
269
|
+
|
|
270
|
+
return rel;
|
|
271
|
+
end);
|
|
272
|
+
|
|
273
|
+
# same method for ideals
|
|
274
|
+
|
|
275
|
+
InstallMethod(GreensDRelation, "for semigroup with CanUseFroidurePin",
|
|
276
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
277
|
+
function(S)
|
|
278
|
+
local fam, data, filt, rel;
|
|
279
|
+
if IsActingSemigroup(S) or (HasIsFinite(S) and not IsFinite(S))
|
|
280
|
+
or (IsFreeBandCategory(S) and Size(GeneratorsOfSemigroup(S)) > 4) then
|
|
281
|
+
TryNextMethod();
|
|
282
|
+
fi;
|
|
283
|
+
fam := GeneralMappingsFamily(ElementsFamily(FamilyObj(S)),
|
|
284
|
+
ElementsFamily(FamilyObj(S)));
|
|
285
|
+
|
|
286
|
+
data := SCC_UNION_LEFT_RIGHT_CAYLEY_GRAPHS(
|
|
287
|
+
DigraphStronglyConnectedComponents(RightCayleyDigraph(S)),
|
|
288
|
+
DigraphStronglyConnectedComponents(LeftCayleyDigraph(S)));
|
|
289
|
+
|
|
290
|
+
filt := IsGreensRelationOfSemigroupThatCanUseFroidurePinRep;
|
|
291
|
+
rel := Objectify(NewType(fam,
|
|
292
|
+
IsEquivalenceRelation
|
|
293
|
+
and IsEquivalenceRelationDefaultRep
|
|
294
|
+
and IsGreensDRelation
|
|
295
|
+
and filt),
|
|
296
|
+
rec(data := data));
|
|
297
|
+
SetSource(rel, S);
|
|
298
|
+
SetRange(rel, S);
|
|
299
|
+
|
|
300
|
+
return rel;
|
|
301
|
+
end);
|
|
302
|
+
|
|
303
|
+
# same method for ideals
|
|
304
|
+
|
|
305
|
+
InstallMethod(GreensHRelation, "for a semigroup with CanUseFroidurePin",
|
|
306
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
307
|
+
function(S)
|
|
308
|
+
local fam, data, filt, rel;
|
|
309
|
+
if IsActingSemigroup(S) or (HasIsFinite(S) and not IsFinite(S)) then
|
|
310
|
+
TryNextMethod();
|
|
311
|
+
fi;
|
|
312
|
+
fam := GeneralMappingsFamily(ElementsFamily(FamilyObj(S)),
|
|
313
|
+
ElementsFamily(FamilyObj(S)));
|
|
314
|
+
|
|
315
|
+
data := FIND_HCLASSES(
|
|
316
|
+
DigraphStronglyConnectedComponents(RightCayleyDigraph(S)),
|
|
317
|
+
DigraphStronglyConnectedComponents(LeftCayleyDigraph(S)));
|
|
318
|
+
|
|
319
|
+
filt := IsGreensRelationOfSemigroupThatCanUseFroidurePinRep;
|
|
320
|
+
rel := Objectify(NewType(fam, IsEquivalenceRelation
|
|
321
|
+
and IsEquivalenceRelationDefaultRep
|
|
322
|
+
and IsGreensHRelation
|
|
323
|
+
and filt),
|
|
324
|
+
rec(data := data));
|
|
325
|
+
SetSource(rel, S);
|
|
326
|
+
SetRange(rel, S);
|
|
327
|
+
|
|
328
|
+
return rel;
|
|
329
|
+
end);
|
|
330
|
+
|
|
331
|
+
#############################################################################
|
|
332
|
+
## 4. Individual classes . . .
|
|
333
|
+
#############################################################################
|
|
334
|
+
|
|
335
|
+
InstallMethod(Enumerator,
|
|
336
|
+
"for a Green's class of a semigroup that CanUseFroidurePin",
|
|
337
|
+
[IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
|
|
338
|
+
function(C)
|
|
339
|
+
local rel, ind;
|
|
340
|
+
rel := EquivalenceClassRelation(C);
|
|
341
|
+
ind := rel!.data.comps[SEMIGROUPS.XClassIndex(C)];
|
|
342
|
+
return EnumeratorCanonical(Range(rel)){ind};
|
|
343
|
+
end);
|
|
344
|
+
|
|
345
|
+
InstallMethod(EquivalenceClassOfElement,
|
|
346
|
+
"for a semigroup with CanUseFroidurePin Green's R-relation + a mult. elt.",
|
|
347
|
+
[IsGreensRRelation and IsGreensRelationOfSemigroupThatCanUseFroidurePinRep,
|
|
348
|
+
IsMultiplicativeElement],
|
|
349
|
+
{rel, rep} -> SEMIGROUPS.EquivalenceClassOfElement(rel, rep, RClassType));
|
|
350
|
+
|
|
351
|
+
InstallMethod(EquivalenceClassOfElement,
|
|
352
|
+
"for a semigroup with CanUseFroidurePin Green's L-relation + a mult. elt.",
|
|
353
|
+
[IsGreensLRelation and IsGreensRelationOfSemigroupThatCanUseFroidurePinRep,
|
|
354
|
+
IsMultiplicativeElement],
|
|
355
|
+
{rel, rep} -> SEMIGROUPS.EquivalenceClassOfElement(rel, rep, LClassType));
|
|
356
|
+
|
|
357
|
+
InstallMethod(EquivalenceClassOfElement,
|
|
358
|
+
"for a semigroup with CanUseFroidurePin Green's H-relation + a mult. elt.",
|
|
359
|
+
[IsGreensHRelation and IsGreensRelationOfSemigroupThatCanUseFroidurePinRep,
|
|
360
|
+
IsMultiplicativeElement],
|
|
361
|
+
{rel, rep} -> SEMIGROUPS.EquivalenceClassOfElement(rel, rep, HClassType));
|
|
362
|
+
|
|
363
|
+
InstallMethod(EquivalenceClassOfElement,
|
|
364
|
+
"for a semigroup with CanUseFroidurePin Green's D-relation + a mult. elt.",
|
|
365
|
+
[IsGreensDRelation and IsGreensRelationOfSemigroupThatCanUseFroidurePinRep,
|
|
366
|
+
IsMultiplicativeElement],
|
|
367
|
+
{rel, rep} -> SEMIGROUPS.EquivalenceClassOfElement(rel, rep, DClassType));
|
|
368
|
+
|
|
369
|
+
# No check Green's classes of an element of a semigroup . . .
|
|
370
|
+
|
|
371
|
+
# The methods for GreensXClassOfElementNC for arbitrary finite semigroup use
|
|
372
|
+
# EquivalenceClassOfElementNC which only have a method in the library, and
|
|
373
|
+
# hence the created classes could not be in
|
|
374
|
+
# IsGreensClassOfSemigroupThatCanUseFroidurePinRep. In any case, calling
|
|
375
|
+
# GreensXRelation(S) (as these methods do) on a semigroup with
|
|
376
|
+
# CanUseFroidurePin completely enumerates it, so the only thing we gain
|
|
377
|
+
# here is one constant time check that the representative actually belongs to
|
|
378
|
+
# the semigroup.
|
|
379
|
+
|
|
380
|
+
InstallMethod(GreensRClassOfElementNC,
|
|
381
|
+
"for a finite semigroup with CanUseFroidurePin and multiplicative element",
|
|
382
|
+
[IsSemigroup and CanUseFroidurePin and IsFinite, IsMultiplicativeElement],
|
|
383
|
+
GreensRClassOfElement);
|
|
384
|
+
|
|
385
|
+
InstallMethod(GreensLClassOfElementNC,
|
|
386
|
+
"for a finite semigroup with CanUseFroidurePin and multiplicative element",
|
|
387
|
+
[IsSemigroup and CanUseFroidurePin and IsFinite, IsMultiplicativeElement],
|
|
388
|
+
GreensLClassOfElement);
|
|
389
|
+
|
|
390
|
+
InstallMethod(GreensHClassOfElementNC,
|
|
391
|
+
"for a finite semigroup with CanUseFroidurePin and multiplicative element",
|
|
392
|
+
[IsSemigroup and CanUseFroidurePin and IsFinite, IsMultiplicativeElement],
|
|
393
|
+
GreensHClassOfElement);
|
|
394
|
+
|
|
395
|
+
InstallMethod(GreensDClassOfElementNC,
|
|
396
|
+
"for a finite semigroup with CanUseFroidurePin and multiplicative element",
|
|
397
|
+
[IsSemigroup and CanUseFroidurePin and IsFinite, IsMultiplicativeElement],
|
|
398
|
+
GreensDClassOfElement);
|
|
399
|
+
|
|
400
|
+
#############################################################################
|
|
401
|
+
## 5. Collections of classes, and reps
|
|
402
|
+
#############################################################################
|
|
403
|
+
|
|
404
|
+
## numbers of classes
|
|
405
|
+
|
|
406
|
+
InstallMethod(NrDClasses, "for a semigroup with CanUseFroidurePin",
|
|
407
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
408
|
+
S -> Length(GreensDRelation(S)!.data.comps));
|
|
409
|
+
|
|
410
|
+
InstallMethod(NrLClasses, "for a semigroup with CanUseFroidurePin",
|
|
411
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
412
|
+
S -> Length(GreensLRelation(S)!.data.comps));
|
|
413
|
+
|
|
414
|
+
InstallMethod(NrRClasses, "for a semigroup with CanUseFroidurePin",
|
|
415
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
416
|
+
S -> Length(GreensRRelation(S)!.data.comps));
|
|
417
|
+
|
|
418
|
+
InstallMethod(NrHClasses, "for a semigroup with CanUseFroidurePin",
|
|
419
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
420
|
+
S -> Length(GreensHRelation(S)!.data.comps));
|
|
421
|
+
|
|
422
|
+
# same method for ideals
|
|
423
|
+
|
|
424
|
+
InstallMethod(GreensLClasses,
|
|
425
|
+
"for a finite semigroup with CanUseFroidurePin",
|
|
426
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
427
|
+
function(S)
|
|
428
|
+
if not IsFinite(S) then
|
|
429
|
+
TryNextMethod();
|
|
430
|
+
fi;
|
|
431
|
+
return SEMIGROUPS.GreensXClasses(S, GreensLRelation, GreensLClassOfElement);
|
|
432
|
+
end);
|
|
433
|
+
|
|
434
|
+
# same method for ideals
|
|
435
|
+
|
|
436
|
+
InstallMethod(GreensRClasses,
|
|
437
|
+
"for a finite semigroup with CanUseFroidurePin",
|
|
438
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
439
|
+
function(S)
|
|
440
|
+
if not IsFinite(S) then
|
|
441
|
+
TryNextMethod();
|
|
442
|
+
fi;
|
|
443
|
+
return SEMIGROUPS.GreensXClasses(S, GreensRRelation, GreensRClassOfElement);
|
|
444
|
+
end);
|
|
445
|
+
|
|
446
|
+
# same method for ideals
|
|
447
|
+
|
|
448
|
+
InstallMethod(GreensHClasses,
|
|
449
|
+
"for a finite semigroup with CanUseFroidurePin",
|
|
450
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
451
|
+
function(S)
|
|
452
|
+
if not IsFinite(S) then
|
|
453
|
+
TryNextMethod();
|
|
454
|
+
fi;
|
|
455
|
+
return SEMIGROUPS.GreensXClasses(S, GreensHRelation, GreensHClassOfElement);
|
|
456
|
+
end);
|
|
457
|
+
|
|
458
|
+
# same method for ideals
|
|
459
|
+
|
|
460
|
+
InstallMethod(GreensDClasses,
|
|
461
|
+
"for a finite semigroup with CanUseFroidurePin",
|
|
462
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
463
|
+
function(S)
|
|
464
|
+
if not IsFinite(S) then
|
|
465
|
+
TryNextMethod();
|
|
466
|
+
fi;
|
|
467
|
+
return SEMIGROUPS.GreensXClasses(S, GreensDRelation, GreensDClassOfElement);
|
|
468
|
+
end);
|
|
469
|
+
|
|
470
|
+
## Green's classes of a Green's class
|
|
471
|
+
|
|
472
|
+
InstallMethod(GreensLClasses,
|
|
473
|
+
"for Green's D-class of a semigroup with CanUseFroidurePin",
|
|
474
|
+
[IsGreensDClass and IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
|
|
475
|
+
function(C)
|
|
476
|
+
return SEMIGROUPS.GreensXClassesOfClass(C, GreensLRelation,
|
|
477
|
+
GreensLClassOfElement);
|
|
478
|
+
end);
|
|
479
|
+
|
|
480
|
+
InstallMethod(GreensRClasses,
|
|
481
|
+
"for a Green's D-class of a semigroup with CanUseFroidurePin",
|
|
482
|
+
[IsGreensDClass and IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
|
|
483
|
+
function(C)
|
|
484
|
+
return SEMIGROUPS.GreensXClassesOfClass(C,
|
|
485
|
+
GreensRRelation,
|
|
486
|
+
GreensRClassOfElement);
|
|
487
|
+
end);
|
|
488
|
+
|
|
489
|
+
InstallMethod(GreensHClasses,
|
|
490
|
+
"for a Green's class of a semigroup with CanUseFroidurePin",
|
|
491
|
+
[IsGreensClass and IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
|
|
492
|
+
function(C)
|
|
493
|
+
if not (IsGreensRClass(C) or IsGreensLClass(C) or IsGreensDClass(C)) then
|
|
494
|
+
ErrorNoReturn("the argument is not a Green's R-, L-, or D-class");
|
|
495
|
+
fi;
|
|
496
|
+
return SEMIGROUPS.GreensXClassesOfClass(C, GreensHRelation,
|
|
497
|
+
GreensHClassOfElement);
|
|
498
|
+
end);
|
|
499
|
+
|
|
500
|
+
## Representatives
|
|
501
|
+
|
|
502
|
+
InstallMethod(DClassReps, "for a semigroup with CanUseFroidurePin",
|
|
503
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
504
|
+
S -> SEMIGROUPS.XClassReps(S, GreensDRelation));
|
|
505
|
+
|
|
506
|
+
InstallMethod(RClassReps, "for a semigroup with CanUseFroidurePin",
|
|
507
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
508
|
+
S -> SEMIGROUPS.XClassReps(S, GreensRRelation));
|
|
509
|
+
|
|
510
|
+
InstallMethod(LClassReps, "for a semigroup with CanUseFroidurePin",
|
|
511
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
512
|
+
S -> SEMIGROUPS.XClassReps(S, GreensLRelation));
|
|
513
|
+
|
|
514
|
+
InstallMethod(HClassReps, "for a semigroup with CanUseFroidurePin",
|
|
515
|
+
[IsSemigroup and CanUseFroidurePin],
|
|
516
|
+
S -> SEMIGROUPS.XClassReps(S, GreensHRelation));
|
|
517
|
+
|
|
518
|
+
InstallMethod(RClassReps,
|
|
519
|
+
"for a Green's D-class of a semigroup with CanUseFroidurePin",
|
|
520
|
+
[IsGreensDClass and IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
|
|
521
|
+
D -> SEMIGROUPS.XClassRepsOfClass(D, GreensRRelation));
|
|
522
|
+
|
|
523
|
+
InstallMethod(LClassReps,
|
|
524
|
+
"for a Green's D-class of a semigroup with CanUseFroidurePin",
|
|
525
|
+
[IsGreensDClass and IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
|
|
526
|
+
D -> SEMIGROUPS.XClassRepsOfClass(D, GreensLRelation));
|
|
527
|
+
|
|
528
|
+
InstallMethod(HClassReps,
|
|
529
|
+
"for a Green's class of a semigroup with CanUseFroidurePin",
|
|
530
|
+
[IsGreensClass and IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
|
|
531
|
+
C -> SEMIGROUPS.XClassRepsOfClass(C, GreensHRelation));
|
|
532
|
+
|
|
533
|
+
# There is duplicate code in here and in maximal D-classes.
|
|
534
|
+
#
|
|
535
|
+
# This cannot be replaced with the method for IsSemigroup and IsFinite since
|
|
536
|
+
# the value of GreensDRelation(S)!.data.comps is not the same as the output of
|
|
537
|
+
# DigraphStronglyConnectedComponents.
|
|
538
|
+
|
|
539
|
+
InstallMethod(PartialOrderOfDClasses,
|
|
540
|
+
"for a finite semigroup with CanUseFroidurePin",
|
|
541
|
+
[IsSemigroup and CanUseFroidurePin and IsFinite],
|
|
542
|
+
function(S)
|
|
543
|
+
local D;
|
|
544
|
+
if not IsBound(GreensDRelation(S)!.data) then
|
|
545
|
+
# Acting semigroups CanUseFroidurePin, but may not have this data.
|
|
546
|
+
TryNextMethod();
|
|
547
|
+
fi;
|
|
548
|
+
D := DigraphMutableCopy(LeftCayleyDigraph(S));
|
|
549
|
+
DigraphEdgeUnion(D, RightCayleyDigraph(S));
|
|
550
|
+
QuotientDigraph(D, GreensDRelation(S)!.data.comps);
|
|
551
|
+
DigraphRemoveLoops(D);
|
|
552
|
+
Apply(OutNeighbours(D), Set);
|
|
553
|
+
MakeImmutable(D);
|
|
554
|
+
return D;
|
|
555
|
+
end);
|
|
556
|
+
|
|
557
|
+
InstallMethod(PartialOrderOfLClasses,
|
|
558
|
+
"for a finite semigroup that CanUseFroidurePin",
|
|
559
|
+
[IsSemigroup and CanUseFroidurePin and IsFinite],
|
|
560
|
+
function(S)
|
|
561
|
+
local D, comps, enum, canon, actual, perm;
|
|
562
|
+
|
|
563
|
+
D := DigraphMutableCopy(LeftCayleyDigraph(S));
|
|
564
|
+
comps := DigraphStronglyConnectedComponents(LeftCayleyDigraph(S)).comps;
|
|
565
|
+
QuotientDigraph(D, comps);
|
|
566
|
+
if not IsBound(GreensLRelation(S)!.data) then
|
|
567
|
+
# Rectify the ordering of the Green's classes, if necessary
|
|
568
|
+
enum := EnumeratorCanonical(S);
|
|
569
|
+
canon := SortingPerm(List(comps, x -> LClass(S, enum[x[1]])));
|
|
570
|
+
actual := SortingPerm(GreensLClasses(S));
|
|
571
|
+
perm := canon / actual;
|
|
572
|
+
if not IsOne(perm) then
|
|
573
|
+
D := OnDigraphs(D, perm);
|
|
574
|
+
fi;
|
|
575
|
+
fi;
|
|
576
|
+
DigraphRemoveLoops(D);
|
|
577
|
+
Apply(OutNeighbours(D), Set);
|
|
578
|
+
MakeImmutable(D);
|
|
579
|
+
return D;
|
|
580
|
+
end);
|
|
581
|
+
|
|
582
|
+
InstallMethod(PartialOrderOfRClasses,
|
|
583
|
+
"for a finite semigroup that CanUseFroidurePin",
|
|
584
|
+
[IsSemigroup and CanUseFroidurePin and IsFinite],
|
|
585
|
+
function(S)
|
|
586
|
+
local D, comps, enum, canon, actual, perm;
|
|
587
|
+
|
|
588
|
+
D := DigraphMutableCopy(RightCayleyDigraph(S));
|
|
589
|
+
comps := DigraphStronglyConnectedComponents(RightCayleyDigraph(S)).comps;
|
|
590
|
+
QuotientDigraph(D, comps);
|
|
591
|
+
|
|
592
|
+
if not IsBound(GreensRRelation(S)!.data) then
|
|
593
|
+
# Rectify the ordering of the Green's classes, if necessary
|
|
594
|
+
enum := EnumeratorCanonical(S);
|
|
595
|
+
canon := SortingPerm(List(comps, x -> RClass(S, enum[x[1]])));
|
|
596
|
+
actual := SortingPerm(GreensRClasses(S));
|
|
597
|
+
perm := canon / actual;
|
|
598
|
+
if not IsOne(perm) then
|
|
599
|
+
D := OnDigraphs(D, perm);
|
|
600
|
+
fi;
|
|
601
|
+
fi;
|
|
602
|
+
DigraphRemoveLoops(D);
|
|
603
|
+
Apply(OutNeighbours(D), Set);
|
|
604
|
+
MakeImmutable(D);
|
|
605
|
+
return D;
|
|
606
|
+
end);
|
|
607
|
+
|
|
608
|
+
InstallMethod(LeftGreensMultiplierNC,
|
|
609
|
+
"for a semigroup that can use Froidure-Pin and L-related elements",
|
|
610
|
+
[IsSemigroup and CanUseFroidurePin,
|
|
611
|
+
IsMultiplicativeElement,
|
|
612
|
+
IsMultiplicativeElement],
|
|
613
|
+
function(S, a, b)
|
|
614
|
+
local gens, D, path, a1, b1;
|
|
615
|
+
gens := GeneratorsOfSemigroup(S);
|
|
616
|
+
D := LeftCayleyDigraph(S);
|
|
617
|
+
a1 := PositionCanonical(S, a);
|
|
618
|
+
b1 := PositionCanonical(S, b);
|
|
619
|
+
path := NextIterator(IteratorOfPaths(D, a1, b1));
|
|
620
|
+
if path = fail then
|
|
621
|
+
# This can occur when, for example, a = b and S is not a monoid.
|
|
622
|
+
if IsMultiplicativeElementWithOne(a)
|
|
623
|
+
and IsMultiplicativeElementWithOne(b) then
|
|
624
|
+
return One(gens);
|
|
625
|
+
elif MultiplicativeNeutralElement(S) <> fail then
|
|
626
|
+
return MultiplicativeNeutralElement(S);
|
|
627
|
+
else
|
|
628
|
+
return SEMIGROUPS.UniversalFakeOne;
|
|
629
|
+
fi;
|
|
630
|
+
fi;
|
|
631
|
+
return EvaluateWord(gens, Reversed(path[2]));
|
|
632
|
+
end);
|
|
633
|
+
|
|
634
|
+
InstallMethod(RightGreensMultiplierNC,
|
|
635
|
+
"for a semigroup that can use Froidure-Pin and R-related elements",
|
|
636
|
+
[IsSemigroup and CanUseFroidurePin,
|
|
637
|
+
IsMultiplicativeElement,
|
|
638
|
+
IsMultiplicativeElement],
|
|
639
|
+
function(S, a, b)
|
|
640
|
+
local gens, D, path, a1, b1;
|
|
641
|
+
gens := GeneratorsOfSemigroup(S);
|
|
642
|
+
D := RightCayleyDigraph(S);
|
|
643
|
+
a1 := PositionCanonical(S, a);
|
|
644
|
+
b1 := PositionCanonical(S, b);
|
|
645
|
+
path := NextIterator(IteratorOfPaths(D, a1, b1));
|
|
646
|
+
if path = fail then
|
|
647
|
+
# This can occur when, for example, a = b and S is not a monoid.
|
|
648
|
+
if IsMultiplicativeElementWithOne(a)
|
|
649
|
+
and IsMultiplicativeElementWithOne(b) then
|
|
650
|
+
return One(gens);
|
|
651
|
+
elif MultiplicativeNeutralElement(S) <> fail then
|
|
652
|
+
return MultiplicativeNeutralElement(S);
|
|
653
|
+
else
|
|
654
|
+
return SEMIGROUPS.UniversalFakeOne;
|
|
655
|
+
fi;
|
|
656
|
+
fi;
|
|
657
|
+
return EvaluateWord(gens, path[2]);
|
|
658
|
+
end);
|
|
659
|
+
|
|
660
|
+
#############################################################################
|
|
661
|
+
## 6. Idempotents . . .
|
|
662
|
+
#############################################################################
|
|
663
|
+
|
|
664
|
+
InstallMethod(NrIdempotents,
|
|
665
|
+
"for a Green's class of a semigroup that CanUseFroidurePin",
|
|
666
|
+
[IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
|
|
667
|
+
function(C)
|
|
668
|
+
local rel, pos;
|
|
669
|
+
rel := EquivalenceClassRelation(C);
|
|
670
|
+
pos := IdempotentsSubset(Range(rel),
|
|
671
|
+
rel!.data.comps[SEMIGROUPS.XClassIndex(C)]);
|
|
672
|
+
return Length(pos);
|
|
673
|
+
end);
|
|
674
|
+
|
|
675
|
+
InstallMethod(Idempotents,
|
|
676
|
+
"for a Green's class of a semigroup that CanUseFroidurePin",
|
|
677
|
+
[IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
|
|
678
|
+
function(C)
|
|
679
|
+
local rel, pos;
|
|
680
|
+
rel := EquivalenceClassRelation(C);
|
|
681
|
+
pos := IdempotentsSubset(Range(rel),
|
|
682
|
+
rel!.data.comps[SEMIGROUPS.XClassIndex(C)]);
|
|
683
|
+
return EnumeratorCanonical(Range(rel)){pos};
|
|
684
|
+
end);
|
|
685
|
+
|
|
686
|
+
#############################################################################
|
|
687
|
+
## 7. Mappings etc . . .
|
|
688
|
+
#############################################################################
|
|
689
|
+
|
|
690
|
+
InstallMethod(IsomorphismPermGroup, "for H-class of a semigroup",
|
|
691
|
+
[IsGreensHClass and IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
|
|
692
|
+
function(H)
|
|
693
|
+
local G, S, N, HH, lookup, pos, x, map, inverses, GG, inv, i;
|
|
694
|
+
|
|
695
|
+
if not IsGroupHClass(H) then
|
|
696
|
+
ErrorNoReturn("the argument (a Green's H-class) is not a group");
|
|
697
|
+
fi;
|
|
698
|
+
|
|
699
|
+
G := Group(());
|
|
700
|
+
S := EnumeratorCanonical(Parent(H));
|
|
701
|
+
N := Size(H);
|
|
702
|
+
HH := Enumerator(H);
|
|
703
|
+
# Position(S, x) -> Position(H, x)
|
|
704
|
+
lookup := ListWithIdenticalEntries(Length(S), fail);
|
|
705
|
+
for i in [1 .. N] do
|
|
706
|
+
pos := Position(S, HH[i]);
|
|
707
|
+
lookup[pos] := i;
|
|
708
|
+
od;
|
|
709
|
+
|
|
710
|
+
for x in H do
|
|
711
|
+
x := PermList(List([1 .. N], i -> lookup[Position(S, HH[i] * x)]));
|
|
712
|
+
if not x in G then
|
|
713
|
+
G := ClosureGroup(G, x);
|
|
714
|
+
if Size(G) = N then
|
|
715
|
+
break;
|
|
716
|
+
fi;
|
|
717
|
+
fi;
|
|
718
|
+
od;
|
|
719
|
+
|
|
720
|
+
GG := EnumeratorSorted(G);
|
|
721
|
+
|
|
722
|
+
map := function(x)
|
|
723
|
+
if not x in H then
|
|
724
|
+
ErrorNoReturn("the argument does not belong to the domain of the ",
|
|
725
|
+
"function");
|
|
726
|
+
fi;
|
|
727
|
+
return GG[lookup[Position(S, HH[1] * x)]];
|
|
728
|
+
end;
|
|
729
|
+
inverses := [];
|
|
730
|
+
for i in [1 .. N] do
|
|
731
|
+
inverses[Position(GG, map(HH[i]))] := HH[i];
|
|
732
|
+
od;
|
|
733
|
+
inv := function(x)
|
|
734
|
+
if not x in G then
|
|
735
|
+
ErrorNoReturn("the argument does not belong to the domain of the ",
|
|
736
|
+
"function");
|
|
737
|
+
fi;
|
|
738
|
+
return inverses[Position(GG, x)];
|
|
739
|
+
end;
|
|
740
|
+
return MappingByFunction(H, G, map, inv);
|
|
741
|
+
end);
|