passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-macosx_13_0_x86_64.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/x86_64-apple-darwin22-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1082 -0
- gap/pkg/semigroups/config.status +1134 -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 +354 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +6 -0
- passagemath_gap_pkg_semigroups-10.6.29.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.abi3.so +0 -0
|
@@ -0,0 +1,889 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## semigroups/semieunit.gi
|
|
4
|
+
## Copyright (C) 2017-2022 Christopher Russell
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
|
|
10
|
+
#############################################################################
|
|
11
|
+
# Methods for creating McAlister triple semigroups
|
|
12
|
+
#############################################################################
|
|
13
|
+
|
|
14
|
+
InstallMethod(McAlisterTripleSemigroup,
|
|
15
|
+
"for a group, digraph, digraph, and action",
|
|
16
|
+
[IsGroup, IsDigraph, IsDigraph, IsFunction],
|
|
17
|
+
function(G, X, Y, act)
|
|
18
|
+
local anti_act, hom, out_nbrs, orbs, min, fam, filt, M, x, y;
|
|
19
|
+
|
|
20
|
+
if not IsFinite(G) then
|
|
21
|
+
ErrorNoReturn("the 1st argument (a group) is not finite");
|
|
22
|
+
fi;
|
|
23
|
+
|
|
24
|
+
anti_act := {pt, g} -> act(pt, g ^ -1);
|
|
25
|
+
|
|
26
|
+
hom := ActionHomomorphism(G, DigraphVertices(X), anti_act);
|
|
27
|
+
|
|
28
|
+
if ForAny(GeneratorsOfGroup(Image(hom)),
|
|
29
|
+
g -> not IsDigraphAutomorphism(X, g)) then
|
|
30
|
+
ErrorNoReturn("the 1st argument (a group) must act by order ",
|
|
31
|
+
"automorphisms on the 2nd argument (a partial order ",
|
|
32
|
+
"digraph)");
|
|
33
|
+
elif not IsPartialOrderDigraph(X) then
|
|
34
|
+
ErrorNoReturn("the 2nd argument (a digraph) must be a partial order ",
|
|
35
|
+
"digraph");
|
|
36
|
+
fi;
|
|
37
|
+
|
|
38
|
+
# Check that Y is a semilattice and an induced subdigraph of X
|
|
39
|
+
if Y <> InducedSubdigraph(X, DigraphVertexLabels(Y)) then
|
|
40
|
+
ErrorNoReturn("the 3rd argument <X> (a digraph) must be an induced ",
|
|
41
|
+
"subdigraph of the 2nd argument <Y> (a digraph) with ",
|
|
42
|
+
"vertex labels corresponding to the vertices of <X> on ",
|
|
43
|
+
"which <Y> was induced");
|
|
44
|
+
elif not IsJoinSemilatticeDigraph(Y) then
|
|
45
|
+
ErrorNoReturn("the 3rd argument (a digraph) must be a join-semilattice ",
|
|
46
|
+
"digraph");
|
|
47
|
+
fi;
|
|
48
|
+
|
|
49
|
+
# Check condition M2 (check that Y is an order ideal of X.)
|
|
50
|
+
out_nbrs := OutNeighbors(X);
|
|
51
|
+
for x in DigraphVertices(X) do
|
|
52
|
+
if not x in DigraphVertexLabels(Y) then
|
|
53
|
+
for y in DigraphSources(DigraphRemoveLoops(Y)) do
|
|
54
|
+
if x in out_nbrs[DigraphVertexLabel(Y, y)] then
|
|
55
|
+
ErrorNoReturn("the out-neighbours of each vertex of the 2nd ",
|
|
56
|
+
"argument (a digraph) which is in the 3rd argument ",
|
|
57
|
+
"<Y> (a digraph) must contain only vertices which ",
|
|
58
|
+
"are in <Y> - see the documentation for more details");
|
|
59
|
+
fi;
|
|
60
|
+
od;
|
|
61
|
+
fi;
|
|
62
|
+
od;
|
|
63
|
+
|
|
64
|
+
orbs := Orbits(Image(hom));
|
|
65
|
+
|
|
66
|
+
# Check condition M3 (check that G.Y = X.)
|
|
67
|
+
if not ForAll(orbs, o -> ForAny(DigraphVertexLabels(Y), v -> v in o)) then
|
|
68
|
+
ErrorNoReturn("every vertex of <X> must be in the orbit of some vertex ",
|
|
69
|
+
"of <X> which is in <Y> - see the documentation ",
|
|
70
|
+
"for more detail");
|
|
71
|
+
fi;
|
|
72
|
+
|
|
73
|
+
for x in DigraphVertices(X) do
|
|
74
|
+
if not x in Union(orbs) and not (x in DigraphVertexLabels(Y)) then
|
|
75
|
+
ErrorNoReturn("every vertex of <X> must be in the orbit of some ",
|
|
76
|
+
"vertex of <X> which is in <Y> - see the documentation",
|
|
77
|
+
" for more detail");
|
|
78
|
+
fi;
|
|
79
|
+
od;
|
|
80
|
+
|
|
81
|
+
# Check condition M4 (essentially, check that G.Y = X is connected.)
|
|
82
|
+
min := DigraphVertexLabel(Y, DigraphSinks(DigraphRemoveLoops(Y))[1]);
|
|
83
|
+
if ForAny(GeneratorsOfGroup(Image(hom)), g -> min ^ g <> min) then
|
|
84
|
+
ErrorNoReturn("<act> must fix the vertex of <X> which is the minimal ",
|
|
85
|
+
"vertex of <Y> - see the documentation for more detail");
|
|
86
|
+
fi;
|
|
87
|
+
|
|
88
|
+
fam := NewFamily("McAlisterTripleSemigroupFamily",
|
|
89
|
+
IsMcAlisterTripleSemigroupElement);
|
|
90
|
+
|
|
91
|
+
# Check if this McAlister triple semigroup is a monoid
|
|
92
|
+
if IsMeetSemilatticeDigraph(Y) then
|
|
93
|
+
filt := IsMcAlisterTripleSemigroup and IsMonoid;
|
|
94
|
+
else
|
|
95
|
+
filt := IsMcAlisterTripleSemigroup;
|
|
96
|
+
fi;
|
|
97
|
+
|
|
98
|
+
# Create the semigroup itself
|
|
99
|
+
M := Objectify(NewType(CollectionsFamily(fam), filt and IsAttributeStoringRep
|
|
100
|
+
and IsEUnitaryInverseSemigroup and IsWholeFamily),
|
|
101
|
+
rec());
|
|
102
|
+
|
|
103
|
+
M!.elementType := NewType(fam, IsMcAlisterTripleSemigroupElementRep);
|
|
104
|
+
|
|
105
|
+
SetMcAlisterTripleSemigroupGroup(M, G);
|
|
106
|
+
SetMcAlisterTripleSemigroupAction(M, anti_act);
|
|
107
|
+
SetMcAlisterTripleSemigroupUnderlyingAction(M, act);
|
|
108
|
+
SetMcAlisterTripleSemigroupPartialOrder(M, X);
|
|
109
|
+
SetMcAlisterTripleSemigroupSemilattice(M, Y);
|
|
110
|
+
SetMcAlisterTripleSemigroupActionHomomorphism(M, hom);
|
|
111
|
+
|
|
112
|
+
SetGeneratorsOfSemigroup(M, SEMIGROUPS.MTSSmallGen(M));
|
|
113
|
+
return M;
|
|
114
|
+
end);
|
|
115
|
+
|
|
116
|
+
InstallMethod(McAlisterTripleSemigroup,
|
|
117
|
+
"for a perm group, digraph, and digraph",
|
|
118
|
+
[IsPermGroup, IsDigraph, IsDigraph],
|
|
119
|
+
{G, X, Y} -> McAlisterTripleSemigroup(G, X, Y, OnPoints));
|
|
120
|
+
|
|
121
|
+
InstallMethod(McAlisterTripleSemigroup,
|
|
122
|
+
"for a perm group, digraph, homogeneous list, and action",
|
|
123
|
+
[IsGroup, IsDigraph, IsHomogeneousList, IsFunction],
|
|
124
|
+
{G, X, sub_ver, act} ->
|
|
125
|
+
McAlisterTripleSemigroup(G, X, InducedSubdigraph(X, sub_ver), act));
|
|
126
|
+
|
|
127
|
+
InstallMethod(McAlisterTripleSemigroup,
|
|
128
|
+
"for a perm group, digraph, and homogeneous list",
|
|
129
|
+
[IsPermGroup, IsDigraph, IsHomogeneousList],
|
|
130
|
+
function(G, X, sub_ver)
|
|
131
|
+
return McAlisterTripleSemigroup(G,
|
|
132
|
+
X,
|
|
133
|
+
InducedSubdigraph(X, sub_ver),
|
|
134
|
+
OnPoints);
|
|
135
|
+
end);
|
|
136
|
+
|
|
137
|
+
#############################################################################
|
|
138
|
+
# Methods for McAlister triple semigroups
|
|
139
|
+
#############################################################################
|
|
140
|
+
|
|
141
|
+
InstallMethod(OneImmutable, "for a McAlister triple semigroup element",
|
|
142
|
+
[IsMcAlisterTripleSemigroupElement],
|
|
143
|
+
x -> OneImmutable(MTSEParent(x)));
|
|
144
|
+
|
|
145
|
+
InstallMethod(OneImmutable,
|
|
146
|
+
"for a McAlister triple semigroup element collection",
|
|
147
|
+
[IsMcAlisterTripleSemigroupElementCollection],
|
|
148
|
+
function(coll)
|
|
149
|
+
local Y;
|
|
150
|
+
|
|
151
|
+
if not IsSemigroup(coll) then
|
|
152
|
+
coll := MTSEParent(Representative(coll));
|
|
153
|
+
fi;
|
|
154
|
+
if not IsMonoid(coll) then
|
|
155
|
+
return fail;
|
|
156
|
+
fi;
|
|
157
|
+
Y := McAlisterTripleSemigroupSemilattice(coll);
|
|
158
|
+
return MTSE(coll, DigraphSources(DigraphRemoveLoops(Y))[1], ());
|
|
159
|
+
end);
|
|
160
|
+
|
|
161
|
+
InstallMethod(McAlisterTripleSemigroupComponents,
|
|
162
|
+
"for a McAlister triple semigroup",
|
|
163
|
+
[IsMcAlisterTripleSemigroup and IsWholeFamily],
|
|
164
|
+
function(S)
|
|
165
|
+
local G, XX, YY, act, comps, id, next, o, v;
|
|
166
|
+
|
|
167
|
+
G := McAlisterTripleSemigroupGroup(S);
|
|
168
|
+
XX := McAlisterTripleSemigroupPartialOrder(S);
|
|
169
|
+
YY := McAlisterTripleSemigroupSemilattice(S);
|
|
170
|
+
act := McAlisterTripleSemigroupAction(S);
|
|
171
|
+
|
|
172
|
+
comps := [];
|
|
173
|
+
id := ListWithIdenticalEntries(DigraphNrVertices(XX), 0);
|
|
174
|
+
next := 1;
|
|
175
|
+
|
|
176
|
+
for v in DigraphVertexLabels(YY) do
|
|
177
|
+
if id[v] = 0 then
|
|
178
|
+
o := Intersection(Orbit(G, v, act), DigraphVertexLabels(YY));
|
|
179
|
+
Add(comps, o);
|
|
180
|
+
id{o} := ListWithIdenticalEntries(Length(o), next);
|
|
181
|
+
next := next + 1;
|
|
182
|
+
fi;
|
|
183
|
+
od;
|
|
184
|
+
return rec(comps := comps, id := id);
|
|
185
|
+
end);
|
|
186
|
+
|
|
187
|
+
InstallMethod(McAlisterTripleSemigroupQuotientDigraph,
|
|
188
|
+
"for a McAlister triple semigroup",
|
|
189
|
+
[IsMcAlisterTripleSemigroup and IsWholeFamily],
|
|
190
|
+
function(S)
|
|
191
|
+
local YY_XX, comps, D;
|
|
192
|
+
YY_XX := McAlisterTripleSemigroupSemilatticeVertexLabelInverseMap(S);
|
|
193
|
+
# Convert components to vertices of Y, rather than their labels in X.
|
|
194
|
+
comps := List(McAlisterTripleSemigroupComponents(S).comps, c -> YY_XX{c});
|
|
195
|
+
D := DigraphMutableCopy(McAlisterTripleSemigroupSemilattice(S));
|
|
196
|
+
D := QuotientDigraph(D, comps);
|
|
197
|
+
DigraphRemoveAllMultipleEdges(D);
|
|
198
|
+
MakeImmutable(D);
|
|
199
|
+
return D;
|
|
200
|
+
end);
|
|
201
|
+
|
|
202
|
+
InstallMethod(McAlisterTripleSemigroupSemilatticeVertexLabelInverseMap,
|
|
203
|
+
"for a McAlister triple semigroup",
|
|
204
|
+
[IsMcAlisterTripleSemigroup and IsWholeFamily],
|
|
205
|
+
function(S)
|
|
206
|
+
local XX, YY, XX_YY, YY_XX, i;
|
|
207
|
+
XX := McAlisterTripleSemigroupPartialOrder(S);
|
|
208
|
+
YY := McAlisterTripleSemigroupSemilattice(S);
|
|
209
|
+
XX_YY := DigraphVertexLabels(YY);
|
|
210
|
+
if XX_YY <> DigraphVertices(XX) then
|
|
211
|
+
YY_XX := ListWithIdenticalEntries(DigraphNrVertices(XX), 0);
|
|
212
|
+
for i in [1 .. Length(XX_YY)] do
|
|
213
|
+
YY_XX[XX_YY[i]] := i;
|
|
214
|
+
od;
|
|
215
|
+
else
|
|
216
|
+
return XX_YY;
|
|
217
|
+
fi;
|
|
218
|
+
return YY_XX;
|
|
219
|
+
end);
|
|
220
|
+
|
|
221
|
+
InstallMethod(String, "for a McAlister triple subsemigroup",
|
|
222
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
223
|
+
RankFilter(IsInverseSemigroup and HasGeneratorsOfSemigroup),
|
|
224
|
+
function(S)
|
|
225
|
+
local G, X, Y;
|
|
226
|
+
if not IsWholeFamily(S) then
|
|
227
|
+
return Concatenation("Semigroup(", String(GeneratorsOfSemigroup(S)), ")");
|
|
228
|
+
fi;
|
|
229
|
+
G := McAlisterTripleSemigroupGroup(S);
|
|
230
|
+
X := McAlisterTripleSemigroupPartialOrder(S);
|
|
231
|
+
Y := McAlisterTripleSemigroupSemilattice(S);
|
|
232
|
+
return StringFormatted("McAlisterTripleSemigroup({}, {}, {})",
|
|
233
|
+
String(G),
|
|
234
|
+
String(X),
|
|
235
|
+
String(DigraphVertexLabels(Y)));
|
|
236
|
+
end);
|
|
237
|
+
|
|
238
|
+
InstallMethod(PrintObj, "for a McAlister triple subsemigroup",
|
|
239
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
240
|
+
function(S)
|
|
241
|
+
Print(String(S));
|
|
242
|
+
end);
|
|
243
|
+
|
|
244
|
+
# TODO(later) Linebreak hints
|
|
245
|
+
|
|
246
|
+
InstallMethod(ViewString, "for a McAlister triple semigroup",
|
|
247
|
+
[IsMcAlisterTripleSemigroup],
|
|
248
|
+
SUM_FLAGS,
|
|
249
|
+
# to beat the library method for IsInverseSemigroup, or IsInverseMonoid
|
|
250
|
+
function(S)
|
|
251
|
+
local G;
|
|
252
|
+
G := McAlisterTripleSemigroupGroup(S);
|
|
253
|
+
return StringFormatted("<McAlister triple semigroup over {}>",
|
|
254
|
+
ViewString(G));
|
|
255
|
+
end);
|
|
256
|
+
|
|
257
|
+
InstallMethod(ViewString, "for a McAlister triple subsemigroup",
|
|
258
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
259
|
+
SUM_FLAGS,
|
|
260
|
+
# to beat the library method for IsInverseSemigroup, or IsInverseMonoid
|
|
261
|
+
function(S)
|
|
262
|
+
local G;
|
|
263
|
+
if HasIsMcAlisterTripleSemigroup(S) and IsMcAlisterTripleSemigroup(S) then
|
|
264
|
+
TryNextMethod();
|
|
265
|
+
fi;
|
|
266
|
+
G := McAlisterTripleSemigroupGroup(S);
|
|
267
|
+
return Concatenation("<McAlister triple subsemigroup over ",
|
|
268
|
+
ViewString(G), ">");
|
|
269
|
+
end);
|
|
270
|
+
|
|
271
|
+
InstallMethod(IsomorphismSemigroups, "for two McAlister triple semigroups",
|
|
272
|
+
[IsMcAlisterTripleSemigroup, IsMcAlisterTripleSemigroup],
|
|
273
|
+
function(S, T)
|
|
274
|
+
local YS, YT, XT, iso_g, iso_x, im_YS, rep, A, hom;
|
|
275
|
+
|
|
276
|
+
iso_g := IsomorphismGroups(McAlisterTripleSemigroupGroup(S),
|
|
277
|
+
McAlisterTripleSemigroupGroup(T));
|
|
278
|
+
|
|
279
|
+
if iso_g = fail then
|
|
280
|
+
return fail;
|
|
281
|
+
fi;
|
|
282
|
+
|
|
283
|
+
YS := McAlisterTripleSemigroupSemilattice(S);
|
|
284
|
+
YT := McAlisterTripleSemigroupSemilattice(T);
|
|
285
|
+
XT := McAlisterTripleSemigroupPartialOrder(T);
|
|
286
|
+
|
|
287
|
+
if not IsIsomorphicDigraph(YS, YT) then
|
|
288
|
+
return fail;
|
|
289
|
+
fi;
|
|
290
|
+
|
|
291
|
+
iso_x := IsomorphismDigraphs(McAlisterTripleSemigroupPartialOrder(S), XT);
|
|
292
|
+
|
|
293
|
+
if iso_x = fail then
|
|
294
|
+
return fail;
|
|
295
|
+
fi;
|
|
296
|
+
|
|
297
|
+
im_YS := List(DigraphVertexLabels(YS), a -> a ^ iso_x);
|
|
298
|
+
# if the restriction of iso_x to DigraphVertexLabels(YS) is not
|
|
299
|
+
# DigraphVertexLabels(YT) then we need to compose iso_x with an
|
|
300
|
+
# automorphism of McAlisterTripleSemilattice(T). Composing this with
|
|
301
|
+
# iso_x will restrict to an isomorphism from (the labels of) YS to YT.
|
|
302
|
+
if im_YS <> DigraphVertexLabels(YT) then
|
|
303
|
+
A := AutomorphismGroup(XT);
|
|
304
|
+
rep := RepresentativeAction(A, im_YS, DigraphVertexLabels(YT), OnSets);
|
|
305
|
+
if rep = fail then
|
|
306
|
+
return fail;
|
|
307
|
+
fi;
|
|
308
|
+
else
|
|
309
|
+
rep := ();
|
|
310
|
+
fi;
|
|
311
|
+
|
|
312
|
+
if ForAll(McAlisterTripleSemigroupGroup(S),
|
|
313
|
+
g -> ForAll(DigraphVertices(McAlisterTripleSemigroupPartialOrder(S)),
|
|
314
|
+
x -> (McAlisterTripleSemigroupAction(S)(x, g)) ^ (rep * iso_x) =
|
|
315
|
+
McAlisterTripleSemigroupAction(T)((x ^ iso_x), (g ^ iso_g)) ^ rep)) then
|
|
316
|
+
hom := SemigroupHomomorphismByFunctionNC(S,
|
|
317
|
+
T,
|
|
318
|
+
s -> MTSE(T,
|
|
319
|
+
s[1] ^ iso_x,
|
|
320
|
+
s[2] ^ iso_g));
|
|
321
|
+
SetIsBijective(hom, true);
|
|
322
|
+
return hom;
|
|
323
|
+
fi;
|
|
324
|
+
return fail;
|
|
325
|
+
end);
|
|
326
|
+
|
|
327
|
+
InstallMethod(McAlisterTripleSemigroupGroup,
|
|
328
|
+
"for a McAlister triple subsemigroup",
|
|
329
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
330
|
+
S -> McAlisterTripleSemigroupGroup(MTSEParent(Representative(S))));
|
|
331
|
+
|
|
332
|
+
InstallMethod(McAlisterTripleSemigroupPartialOrder,
|
|
333
|
+
"for a McAlister triple subsemigroup",
|
|
334
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
335
|
+
S -> McAlisterTripleSemigroupPartialOrder(MTSEParent(Representative(S))));
|
|
336
|
+
|
|
337
|
+
InstallMethod(McAlisterTripleSemigroupSemilattice,
|
|
338
|
+
"for a McAlister triple subsemigroup",
|
|
339
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
340
|
+
S -> McAlisterTripleSemigroupSemilattice(MTSEParent(Representative(S))));
|
|
341
|
+
|
|
342
|
+
InstallMethod(McAlisterTripleSemigroupAction,
|
|
343
|
+
"for a McAlister triple subsemigroup",
|
|
344
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
345
|
+
S -> McAlisterTripleSemigroupAction(MTSEParent(Representative(S))));
|
|
346
|
+
|
|
347
|
+
InstallMethod(McAlisterTripleSemigroupActionHomomorphism,
|
|
348
|
+
"for a McAlister triple subsemigroup",
|
|
349
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
350
|
+
S -> MTSActionHomomorphism(MTSEParent(Representative(S))));
|
|
351
|
+
|
|
352
|
+
InstallMethod(McAlisterTripleSemigroupUnderlyingAction,
|
|
353
|
+
"for a McAlister triple subsemigroup",
|
|
354
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
355
|
+
S -> MTSUnderlyingAction(MTSEParent(Representative(S))));
|
|
356
|
+
|
|
357
|
+
InstallMethod(McAlisterTripleSemigroupComponents,
|
|
358
|
+
"for a McAlister triple subsemigroup",
|
|
359
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
360
|
+
S -> MTSComponents(MTSEParent(Representative(S))));
|
|
361
|
+
|
|
362
|
+
InstallMethod(McAlisterTripleSemigroupQuotientDigraph,
|
|
363
|
+
"for a McAlister triple subsemigroup",
|
|
364
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
365
|
+
S -> MTSQuotientDigraph(MTSEParent(Representative(S))));
|
|
366
|
+
|
|
367
|
+
InstallMethod(McAlisterTripleSemigroupSemilatticeVertexLabelInverseMap,
|
|
368
|
+
"for a McAlister triple subsemigroup",
|
|
369
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
370
|
+
S -> MTSSemilatticeVertexLabelInverseMap(MTSEParent(Representative(S))));
|
|
371
|
+
|
|
372
|
+
SEMIGROUPS.MTSSmallGen := function(S)
|
|
373
|
+
local G, Sl, X_Y, Y_X, comps, RepAct, _Stab, act, gens, po, top, sl, above, c,
|
|
374
|
+
stab, check, orbs, stabs, found, Gcj, j, nbrs, r, i, cat, pos, combined,
|
|
375
|
+
new_orbs, g, n, sizes, Gc1, alpha, gs, u, nbr, v, o, orb;
|
|
376
|
+
|
|
377
|
+
G := McAlisterTripleSemigroupGroup(S);
|
|
378
|
+
Sl := McAlisterTripleSemigroupSemilattice(S);
|
|
379
|
+
X_Y := DigraphVertexLabels(Sl);
|
|
380
|
+
Y_X := McAlisterTripleSemigroupSemilatticeVertexLabelInverseMap(S);
|
|
381
|
+
comps := McAlisterTripleSemigroupComponents(S).comps;
|
|
382
|
+
|
|
383
|
+
if McAlisterTripleSemigroupUnderlyingAction(S) = OnPoints then
|
|
384
|
+
RepAct := {a, b} -> RepresentativeAction(G, b, a);
|
|
385
|
+
_Stab := a -> Stabilizer(G, a);
|
|
386
|
+
else
|
|
387
|
+
# Can't use McAlisterTripleSemigroupAction because it is an anti-action
|
|
388
|
+
# but not an action and produces unexpected results with some of these
|
|
389
|
+
# methods.
|
|
390
|
+
act := McAlisterTripleSemigroupUnderlyingAction(S);
|
|
391
|
+
RepAct := {a, b} -> RepresentativeAction(G, b, a, act);
|
|
392
|
+
gens := Generators(G);
|
|
393
|
+
_Stab := a -> Stabilizer(G, a, act);
|
|
394
|
+
fi;
|
|
395
|
+
|
|
396
|
+
# We use reflexive transitive reductions so we can only check neighbours
|
|
397
|
+
# u > v such that there is no w where u > w > v.
|
|
398
|
+
gens := [];
|
|
399
|
+
po := MTSQuotientDigraph(S); # Vertex i corresponds to comps[i].
|
|
400
|
+
po := DigraphReflexiveTransitiveReduction(po);
|
|
401
|
+
top := Reversed(DigraphTopologicalSort(po)); # Order D-classes top 1st.
|
|
402
|
+
sl := DigraphReflexiveTransitiveReduction(Sl);
|
|
403
|
+
SetDigraphVertexLabels(sl, DigraphVertexLabels(Sl)); # Preserve labelling.
|
|
404
|
+
for i in [1 .. Length(top)] do
|
|
405
|
+
above := Filtered(top{[1 .. i - 1]}, j -> Y_X[j]
|
|
406
|
+
in InNeighboursOfVertex(po, top[i]));
|
|
407
|
+
c := comps[top[i]];
|
|
408
|
+
|
|
409
|
+
if IsEmpty(above) then # Add generating set for this D-class.
|
|
410
|
+
stab := GeneratorsOfGroup(_Stab(c[1]));
|
|
411
|
+
for g in stab do
|
|
412
|
+
# Add gens of maximal subgroup of R-class.
|
|
413
|
+
Add(gens, MTSE(S, c[1], g));
|
|
414
|
+
od;
|
|
415
|
+
if Length(c) > 1 then # Add reps from H-classes of R-class.
|
|
416
|
+
for j in [1 .. Length(c) - 1] do
|
|
417
|
+
Add(gens, MTSE(S, c[j], RepAct(c[j + 1], c[j])));
|
|
418
|
+
od;
|
|
419
|
+
elif IsEmpty(stab) then # If D-class is just a single element, add it.
|
|
420
|
+
Add(gens, MTSE(S, c[1], One(G)));
|
|
421
|
+
fi;
|
|
422
|
+
Add(gens, MTSE(S, Last(c), RepAct(c[1], Last(c))));
|
|
423
|
+
|
|
424
|
+
else # We may have already generated some elements of this D-class.
|
|
425
|
+
|
|
426
|
+
check := false; # Check stays false until we know we have generated at
|
|
427
|
+
# least one element in this D-class.
|
|
428
|
+
|
|
429
|
+
# Figure out which subsections of the D-class are generated
|
|
430
|
+
# stabs are maximal subgroups in these subsections
|
|
431
|
+
# orbs are lambda values, correspond to vertex labels of MTSSemilattice.
|
|
432
|
+
orbs := [];
|
|
433
|
+
stabs := [];
|
|
434
|
+
found := [];
|
|
435
|
+
for u in c do
|
|
436
|
+
if not u in found then
|
|
437
|
+
Gcj := _Stab(u);
|
|
438
|
+
Add(orbs, [u]);
|
|
439
|
+
Add(found, u);
|
|
440
|
+
Add(stabs, Group(()));
|
|
441
|
+
j := Length(orbs);
|
|
442
|
+
nbrs := List(InNeighboursOfVertex(sl, Y_X[u]), v -> X_Y[v]);
|
|
443
|
+
for nbr in nbrs do
|
|
444
|
+
for v in Difference(c, found) do
|
|
445
|
+
if ForAny(Elements(RightCoset(Gcj, RepAct(v, u))),
|
|
446
|
+
x -> MTSAction(S)(nbr, x) in X_Y) then
|
|
447
|
+
Add(orbs[j], v);
|
|
448
|
+
fi;
|
|
449
|
+
od;
|
|
450
|
+
|
|
451
|
+
r := RightCosets(Gcj, stabs[j]);
|
|
452
|
+
i := 1;
|
|
453
|
+
while i <= Length(r) do # TODO(later): make this faster
|
|
454
|
+
if r[i] = RightCoset(stabs[j], One(Gcj)) then
|
|
455
|
+
i := i + 1;
|
|
456
|
+
elif MTSAction(S)(nbr, Representative(r[i])) in X_Y then
|
|
457
|
+
stabs[j] := ClosureGroup(stabs[j], Representative(r[i]));
|
|
458
|
+
r := RightCosets(Gcj, stabs[j]);
|
|
459
|
+
i := 1;
|
|
460
|
+
else
|
|
461
|
+
i := i + 1;
|
|
462
|
+
fi;
|
|
463
|
+
od;
|
|
464
|
+
od;
|
|
465
|
+
found := Union(orbs);
|
|
466
|
+
fi;
|
|
467
|
+
od;
|
|
468
|
+
|
|
469
|
+
# 1 Combine intersecting orbits.
|
|
470
|
+
cat := Concatenation(orbs);
|
|
471
|
+
while not IsDuplicateFreeList(cat) do
|
|
472
|
+
i := 0;
|
|
473
|
+
pos := [];
|
|
474
|
+
while not Size(pos) > 1 do
|
|
475
|
+
i := i + 1;
|
|
476
|
+
pos := Positions(cat, cat[i]);
|
|
477
|
+
od;
|
|
478
|
+
|
|
479
|
+
combined := [];
|
|
480
|
+
new_orbs := [];
|
|
481
|
+
for o in orbs do
|
|
482
|
+
if cat[i] in o then
|
|
483
|
+
Append(combined, o);
|
|
484
|
+
else
|
|
485
|
+
Add(new_orbs, o);
|
|
486
|
+
fi;
|
|
487
|
+
od;
|
|
488
|
+
Add(new_orbs, Set(combined));
|
|
489
|
+
orbs := new_orbs;
|
|
490
|
+
cat := Concatenation(orbs);
|
|
491
|
+
od;
|
|
492
|
+
|
|
493
|
+
# 2 Add generators to link orbits.
|
|
494
|
+
if Size(orbs) <> 1 then
|
|
495
|
+
for orb in orbs{[2 .. Length(orbs)]} do
|
|
496
|
+
g := MTSE(S, orbs[1][1], RepAct(orb[1], orbs[1][1]));
|
|
497
|
+
Add(gens, g);
|
|
498
|
+
Add(gens, g ^ -1); # Could add less gens here
|
|
499
|
+
check := true;
|
|
500
|
+
od;
|
|
501
|
+
fi;
|
|
502
|
+
|
|
503
|
+
# 3 Determine (and add) missing generators of maximal subgroup.
|
|
504
|
+
n := Size(Gcj);
|
|
505
|
+
sizes := List(stabs, Size);
|
|
506
|
+
Gc1 := _Stab(orbs[1][1]);
|
|
507
|
+
if not n in sizes then
|
|
508
|
+
for i in [1 .. Size(stabs) - 1] do
|
|
509
|
+
if IsSubgroup(stabs[1], stabs[i]) then
|
|
510
|
+
continue;
|
|
511
|
+
fi;
|
|
512
|
+
alpha := RepAct(orbs[i][1], orbs[1][1]);
|
|
513
|
+
gs := List(GeneratorsOfGroup(stabs[i]),
|
|
514
|
+
g -> (alpha ^ -1) * g * alpha);
|
|
515
|
+
stabs[1] := ClosureGroup(stabs[1], gs);
|
|
516
|
+
if stabs[1] = Gc1 then
|
|
517
|
+
break;
|
|
518
|
+
fi;
|
|
519
|
+
od;
|
|
520
|
+
|
|
521
|
+
# 3.1 If they are missing then add them.
|
|
522
|
+
for g in GeneratorsOfGroup(Gc1) do
|
|
523
|
+
if not g in stabs[1] then
|
|
524
|
+
Add(gens, MTSE(S, orbs[1][1], g));
|
|
525
|
+
check := true;
|
|
526
|
+
fi;
|
|
527
|
+
od;
|
|
528
|
+
fi;
|
|
529
|
+
|
|
530
|
+
# If we haven't added anything yet and nothing is generated by
|
|
531
|
+
# higher D-classes then add an element.
|
|
532
|
+
if not check and Length(nbrs) = 1 then
|
|
533
|
+
Add(gens, MTSE(S, orbs[1][1], One(G)));
|
|
534
|
+
fi;
|
|
535
|
+
|
|
536
|
+
fi;
|
|
537
|
+
od;
|
|
538
|
+
return SmallSemigroupGeneratingSet(gens);
|
|
539
|
+
end;
|
|
540
|
+
|
|
541
|
+
InstallMethod(IsomorphismSemigroup,
|
|
542
|
+
"for IsMcAlisterTripleSemigroup and a semigroup",
|
|
543
|
+
[IsMcAlisterTripleSemigroup, IsSemigroup],
|
|
544
|
+
function(_, S)
|
|
545
|
+
local Es, iso_pg, G, H, map, xx, M, iso, yy, ids, cong, grp, hom, map_G, Dcl,
|
|
546
|
+
n, cosets, x, xiny, yinx, D, s, R, e, Ge, h, y_pos, x_pos, act, ah, edgy,
|
|
547
|
+
act2, i, isom;
|
|
548
|
+
|
|
549
|
+
if not IsEUnitaryInverseSemigroup(S) then
|
|
550
|
+
ErrorNoReturn("the 2nd argument (a semigroup) is not E-unitary");
|
|
551
|
+
fi;
|
|
552
|
+
|
|
553
|
+
Es := IdempotentGeneratedSubsemigroup(S);
|
|
554
|
+
if Size(Es) = 1 then
|
|
555
|
+
iso_pg := IsomorphismPermGroup(S);
|
|
556
|
+
G := Range(iso_pg);
|
|
557
|
+
map := g -> PermList(Concatenation([1], ListPerm(g) + 1));
|
|
558
|
+
H := Group(List(Generators(G), map));
|
|
559
|
+
map := MappingByFunction(G, H, map);
|
|
560
|
+
xx := Digraph([[1]]);
|
|
561
|
+
M := McAlisterTripleSemigroup(H, xx, xx);
|
|
562
|
+
|
|
563
|
+
iso := s -> MTSE(M, 1, (s ^ iso_pg) ^ map);
|
|
564
|
+
isom := SemigroupHomomorphismByFunctionNC(S, M, iso);
|
|
565
|
+
SetIsBijective(isom, true);
|
|
566
|
+
return isom;
|
|
567
|
+
fi;
|
|
568
|
+
|
|
569
|
+
yy := Digraph(NaturalPartialOrder(Es));
|
|
570
|
+
ids := Elements(Es);
|
|
571
|
+
|
|
572
|
+
cong := MinimumGroupCongruence(S);
|
|
573
|
+
grp := S / cong;
|
|
574
|
+
iso_pg := IsomorphismPermGroup(grp); # This takes a long time, e.g. Sym5.
|
|
575
|
+
G := Range(iso_pg);
|
|
576
|
+
if not IsEmpty(SmallGeneratingSet(G)) then
|
|
577
|
+
G := Group(SmallGeneratingSet(G));
|
|
578
|
+
fi;
|
|
579
|
+
hom := QuotientSemigroupHomomorphism(grp);
|
|
580
|
+
map_G := CompositionMapping(iso_pg, hom);
|
|
581
|
+
|
|
582
|
+
Dcl := DClasses(S);
|
|
583
|
+
n := NrDClasses(S);
|
|
584
|
+
cosets := [];
|
|
585
|
+
x := [];
|
|
586
|
+
xiny := [];
|
|
587
|
+
yinx := [];
|
|
588
|
+
for i in [1 .. n] do
|
|
589
|
+
D := Dcl[i];
|
|
590
|
+
s := Representative(D);
|
|
591
|
+
R := RClass(D, s);
|
|
592
|
+
e := LeftOne(s);
|
|
593
|
+
Ge := Group(List(SmallGeneratingSet(Group(Elements(HClass(D, e)))), g -> g ^
|
|
594
|
+
map_G));
|
|
595
|
+
cosets[i] := RightCosets(G, Ge);
|
|
596
|
+
Append(x, Set(cosets[i], q -> [i, q]));
|
|
597
|
+
for H in HClasses(R) do
|
|
598
|
+
h := Representative(H);
|
|
599
|
+
y_pos := Position(ids, RightOne(h));
|
|
600
|
+
x_pos := Position(x, [i, Ge * (h ^ map_G)]);
|
|
601
|
+
|
|
602
|
+
yinx[y_pos] := x_pos;
|
|
603
|
+
xiny[x_pos] := y_pos;
|
|
604
|
+
od;
|
|
605
|
+
od;
|
|
606
|
+
|
|
607
|
+
act := function(a, g)
|
|
608
|
+
local b;
|
|
609
|
+
b := x[a];
|
|
610
|
+
return Position(x, [b[1], b[2] * g]);
|
|
611
|
+
end;
|
|
612
|
+
|
|
613
|
+
ah := ActionHomomorphism(G, [1 .. Size(x)], act);
|
|
614
|
+
edgy := List(DigraphEdges(yy), e -> [yinx[e[1]], yinx[e[2]]]);
|
|
615
|
+
xx := EdgeOrbitsDigraph(Image(ah), edgy, Size(x));
|
|
616
|
+
xx := DigraphReflexiveTransitiveClosure(xx);
|
|
617
|
+
yy := DigraphReflexiveTransitiveClosure(yy);
|
|
618
|
+
SetDigraphVertexLabels(yy, yinx);
|
|
619
|
+
|
|
620
|
+
act2 := {a, g} -> a ^ (g ^ ah);
|
|
621
|
+
M := McAlisterTripleSemigroup(G, xx, yy, act2);
|
|
622
|
+
iso := s -> MTSE(M, yinx[Position(ids, LeftOne(s))], s ^ map_G);
|
|
623
|
+
|
|
624
|
+
isom := SemigroupHomomorphismByFunctionNC(S, M, iso);
|
|
625
|
+
SetIsBijective(isom, true);
|
|
626
|
+
return isom;
|
|
627
|
+
|
|
628
|
+
end);
|
|
629
|
+
|
|
630
|
+
InstallMethod(IsWholeFamily, "for a McAlister triple semigroup",
|
|
631
|
+
[IsMcAlisterTripleSemigroupElementCollection],
|
|
632
|
+
C -> Size(Elements(C)[1]![3]) = Size(C));
|
|
633
|
+
|
|
634
|
+
#############################################################################
|
|
635
|
+
# Methods for McAlister triple elements
|
|
636
|
+
#############################################################################
|
|
637
|
+
|
|
638
|
+
InstallMethod(McAlisterTripleSemigroupElement,
|
|
639
|
+
"for a McAlister triple semigroup, pos int, and perm",
|
|
640
|
+
[IsMcAlisterTripleSemigroup, IsPosInt, IsMultiplicativeElementWithInverse],
|
|
641
|
+
function(S, A, g)
|
|
642
|
+
if not A in DigraphVertexLabels(McAlisterTripleSemigroupSemilattice(S)) then
|
|
643
|
+
ErrorNoReturn("the 2nd argument should be a vertex label of the ",
|
|
644
|
+
"join-semilattice of the McAlister triple");
|
|
645
|
+
elif not g in McAlisterTripleSemigroupGroup(S) then
|
|
646
|
+
ErrorNoReturn("the 3rd argument must an element of the group of the ",
|
|
647
|
+
"McAlister triple");
|
|
648
|
+
elif not (McAlisterTripleSemigroupAction(S)(A, g ^ -1) in
|
|
649
|
+
DigraphVertexLabels(McAlisterTripleSemigroupSemilattice(S))) then
|
|
650
|
+
ErrorNoReturn("the arguments do not specify an element of the McAlister ",
|
|
651
|
+
"triple semigroup");
|
|
652
|
+
fi;
|
|
653
|
+
return Objectify(S!.elementType, [A, g, S]);
|
|
654
|
+
end);
|
|
655
|
+
|
|
656
|
+
InstallMethod(ELM_LIST,
|
|
657
|
+
"for a McAlister triple semigroup element rep and a pos int",
|
|
658
|
+
[IsMcAlisterTripleSemigroupElementRep, IsPosInt],
|
|
659
|
+
function(x, i)
|
|
660
|
+
if i <= 2 then
|
|
661
|
+
return x![i];
|
|
662
|
+
fi;
|
|
663
|
+
ErrorNoReturn("the 2nd argument (a pos. int.) must be at most 2");
|
|
664
|
+
end);
|
|
665
|
+
|
|
666
|
+
InstallMethod(McAlisterTripleSemigroupElementParent,
|
|
667
|
+
"for a McAlister triple semigroup element rep",
|
|
668
|
+
[IsMcAlisterTripleSemigroupElementRep],
|
|
669
|
+
{x} -> x![3]);
|
|
670
|
+
|
|
671
|
+
InstallMethod(String, "for a McAlister triple semigroup element rep",
|
|
672
|
+
[IsMcAlisterTripleSemigroupElementRep],
|
|
673
|
+
function(x)
|
|
674
|
+
return Concatenation("MTSE(", String(x![3]), ", ", String(x![1]), ", ",
|
|
675
|
+
String(x![2]), ")");
|
|
676
|
+
end);
|
|
677
|
+
|
|
678
|
+
# TODO(later) Linebreak hints
|
|
679
|
+
|
|
680
|
+
InstallMethod(ViewString, "for a McAlister triple semigroup element rep",
|
|
681
|
+
[IsMcAlisterTripleSemigroupElementRep],
|
|
682
|
+
{x} -> Concatenation("(", ViewString(x[1]), ", ", ViewString(x[2]), ")"));
|
|
683
|
+
|
|
684
|
+
InstallMethod(\=, "for two McAlister triple semigroup element reps",
|
|
685
|
+
IsIdenticalObj,
|
|
686
|
+
[IsMcAlisterTripleSemigroupElementRep, IsMcAlisterTripleSemigroupElementRep],
|
|
687
|
+
{x, y} -> x![1] = y![1] and x![2] = y![2] and x![3] = y![3]);
|
|
688
|
+
|
|
689
|
+
InstallMethod(\*, "for two McAlister triple semigroup element reps",
|
|
690
|
+
[IsMcAlisterTripleSemigroupElementRep, IsMcAlisterTripleSemigroupElementRep],
|
|
691
|
+
function(x, y)
|
|
692
|
+
local S;
|
|
693
|
+
S := McAlisterTripleSemigroupElementParent(x);
|
|
694
|
+
if S <> McAlisterTripleSemigroupElementParent(y) then
|
|
695
|
+
ErrorNoReturn("the arguments (McAlister triple elements) do not ",
|
|
696
|
+
"belong to the same McAlister triple semigroup");
|
|
697
|
+
fi;
|
|
698
|
+
return MTSE(S, DigraphVertexLabel(McAlisterTripleSemigroupPartialOrder(S),
|
|
699
|
+
PartialOrderDigraphJoinOfVertices(
|
|
700
|
+
McAlisterTripleSemigroupPartialOrder(S), x[1],
|
|
701
|
+
McAlisterTripleSemigroupAction(S)(y[1], x[2]))),
|
|
702
|
+
x[2] * y[2]);
|
|
703
|
+
end);
|
|
704
|
+
|
|
705
|
+
InstallMethod(\<, "for two McAlister triple semigroup element reps",
|
|
706
|
+
[IsMcAlisterTripleSemigroupElementRep, IsMcAlisterTripleSemigroupElementRep],
|
|
707
|
+
{x, y} -> x[1] < y[1] or (x[1] = y[1] and x[2] < y[2]));
|
|
708
|
+
|
|
709
|
+
InstallMethod(InverseOp, "for a McAlister triple semigroup element rep",
|
|
710
|
+
[IsMcAlisterTripleSemigroupElementRep],
|
|
711
|
+
function(x)
|
|
712
|
+
return MTSE(x![3],
|
|
713
|
+
McAlisterTripleSemigroupAction(x![3])(x[1], Inverse(x[2])),
|
|
714
|
+
Inverse(x[2]));
|
|
715
|
+
end);
|
|
716
|
+
|
|
717
|
+
InstallMethod(\^, "for a McAlister triple semigroup element and a negative int",
|
|
718
|
+
[IsMcAlisterTripleSemigroupElement, IsNegInt],
|
|
719
|
+
{x, i} -> InverseOp(x ^ - i));
|
|
720
|
+
|
|
721
|
+
InstallMethod(LeftOne, "for a McAlister triple semigroup element rep",
|
|
722
|
+
[IsMcAlisterTripleSemigroupElementRep],
|
|
723
|
+
function(x)
|
|
724
|
+
local S;
|
|
725
|
+
S := MTSEParent(x);
|
|
726
|
+
return MTSE(S, x[1], One(MTSGroup(S)));
|
|
727
|
+
end);
|
|
728
|
+
|
|
729
|
+
InstallMethod(RightOne, "for a McAlister triple semigroup element rep",
|
|
730
|
+
[IsMcAlisterTripleSemigroupElementRep],
|
|
731
|
+
function(x)
|
|
732
|
+
local S;
|
|
733
|
+
S := MTSEParent(x);
|
|
734
|
+
return MTSE(S, MTSAction(S)(x[1], x[2] ^ -1), One(MTSGroup(S)));
|
|
735
|
+
end);
|
|
736
|
+
|
|
737
|
+
InstallMethod(ChooseHashFunction, "for McAlister triple semigroup elements",
|
|
738
|
+
[IsMcAlisterTripleSemigroupElement, IsInt],
|
|
739
|
+
function(x, hashlen)
|
|
740
|
+
local data;
|
|
741
|
+
data := [ChooseHashFunction(x[1], hashlen),
|
|
742
|
+
ChooseHashFunction(x[2], hashlen),
|
|
743
|
+
hashlen];
|
|
744
|
+
return rec(func := SEMIGROUPS.HashFunctionForMcAlisterTripleSemigroupElements,
|
|
745
|
+
data := data);
|
|
746
|
+
end);
|
|
747
|
+
|
|
748
|
+
SEMIGROUPS.HashFunctionForMcAlisterTripleSemigroupElements := function(x, data)
|
|
749
|
+
return (17 * data[1].func(x[1], data[1].data)
|
|
750
|
+
+ data[2].func(x[2], data[2].data)) mod data[3] + 1;
|
|
751
|
+
end;
|
|
752
|
+
|
|
753
|
+
###############################################################################
|
|
754
|
+
# F-inverse Semigroups
|
|
755
|
+
###############################################################################
|
|
756
|
+
# The connected components of the natural partial order will be the
|
|
757
|
+
# congruence classes of the minimum group congruence. Thus we can simply
|
|
758
|
+
# check that precisely one of the sources of the digraph of the natural
|
|
759
|
+
# partial order is in each connected component.
|
|
760
|
+
InstallMethod(IsFInverseMonoid, "for a semigroup",
|
|
761
|
+
[IsSemigroup],
|
|
762
|
+
function(S)
|
|
763
|
+
local comp, po;
|
|
764
|
+
if not IsInverseMonoid(S) then
|
|
765
|
+
return false;
|
|
766
|
+
fi;
|
|
767
|
+
po := Digraph(NaturalPartialOrder(S));
|
|
768
|
+
for comp in DigraphConnectedComponents(po).comps do
|
|
769
|
+
if not Size(Intersection(comp, DigraphSources(po))) = 1 then
|
|
770
|
+
return false;
|
|
771
|
+
fi;
|
|
772
|
+
od;
|
|
773
|
+
return true;
|
|
774
|
+
end);
|
|
775
|
+
|
|
776
|
+
InstallMethod(IsFInverseMonoid, "for a McAlister triple semigroup",
|
|
777
|
+
[IsMcAlisterTripleSemigroup],
|
|
778
|
+
S -> IsMonoid(S) and IsFInverseSemigroup(S));
|
|
779
|
+
|
|
780
|
+
# A McAlister triple semigroup is F-inverse precisely when X, the partial
|
|
781
|
+
# order, is a join-semilattice.
|
|
782
|
+
InstallMethod(IsFInverseSemigroup, "for a McAlister triple semigroup",
|
|
783
|
+
[IsMcAlisterTripleSemigroup],
|
|
784
|
+
S -> IsJoinSemilatticeDigraph(McAlisterTripleSemigroupPartialOrder(S)));
|
|
785
|
+
|
|
786
|
+
# For an inverse semigroup S we denote \sigma_{e,f} = \sigma \cap eSf x eSf.
|
|
787
|
+
# An E-unitary inverse semigroup is said to be an F-inverse semigroup if
|
|
788
|
+
# for each pair of idempotents (e,f): each \sigma_{e,f} class has a maximal
|
|
789
|
+
# element. It is simpler to find an isomorphism and use the above method.
|
|
790
|
+
InstallMethod(IsFInverseSemigroup, "for a semigroup",
|
|
791
|
+
[IsSemigroup],
|
|
792
|
+
function(S)
|
|
793
|
+
if not IsEUnitaryInverseSemigroup(S) then
|
|
794
|
+
return false;
|
|
795
|
+
fi;
|
|
796
|
+
return IsFInverseSemigroup(AsSemigroup(IsMcAlisterTripleSemigroup, S));
|
|
797
|
+
end);
|
|
798
|
+
|
|
799
|
+
###############################################################################
|
|
800
|
+
# E-unitary inverse covers
|
|
801
|
+
###############################################################################
|
|
802
|
+
InstallMethod(EUnitaryInverseCover,
|
|
803
|
+
"for an inverse partial perm semigroup",
|
|
804
|
+
[IsInverseSemigroup and IsPartialPermCollection],
|
|
805
|
+
function(S)
|
|
806
|
+
local gens, deg, units, G, P, embed, id, cover_gens, s, g, cover, i;
|
|
807
|
+
gens := GeneratorsOfSemigroup(S);
|
|
808
|
+
deg := DegreeOfPartialPermSemigroup(S);
|
|
809
|
+
units := [];
|
|
810
|
+
for s in gens do
|
|
811
|
+
Add(units, SEMIGROUPS.PartialPermExtendToPerm(s, deg));
|
|
812
|
+
od;
|
|
813
|
+
G := InverseSemigroup(units);
|
|
814
|
+
|
|
815
|
+
P := DirectProduct(S, G);
|
|
816
|
+
embed := SemigroupDirectProductInfo(P).embedding;
|
|
817
|
+
if not IsMonoid(S) then
|
|
818
|
+
id := PartialPerm([1 .. deg]);
|
|
819
|
+
fi;
|
|
820
|
+
cover_gens := [];
|
|
821
|
+
for i in [1 .. Size(gens)] do
|
|
822
|
+
s := embed(gens[i], 1);
|
|
823
|
+
g := embed(units[i], 2);
|
|
824
|
+
if not IsMonoid(S) then
|
|
825
|
+
g := JoinOfPartialPerms(g, id);
|
|
826
|
+
fi;
|
|
827
|
+
Add(cover_gens, s * g);
|
|
828
|
+
od;
|
|
829
|
+
|
|
830
|
+
cover := SemigroupDirectProductInfo(P).projection;
|
|
831
|
+
return SemigroupHomomorphismByFunctionNC(InverseSemigroup(cover_gens),
|
|
832
|
+
S,
|
|
833
|
+
x -> cover(x, 1));
|
|
834
|
+
end);
|
|
835
|
+
|
|
836
|
+
# This method extends a partial perm 'x' to a permutation of degree 'deg'.
|
|
837
|
+
SEMIGROUPS.PartialPermExtendToPerm := function(x, deg)
|
|
838
|
+
local c, i, dom, image;
|
|
839
|
+
image := [];
|
|
840
|
+
# Turn all components into cycles.
|
|
841
|
+
for c in ComponentsOfPartialPerm(x) do
|
|
842
|
+
image[c[1]] := OnPoints(c[1], x);
|
|
843
|
+
if Size(c) > 1 then
|
|
844
|
+
for i in [1 .. Size(c) - 1] do
|
|
845
|
+
image[c[i]] := OnPoints(c[i], x);
|
|
846
|
+
od;
|
|
847
|
+
image[c[i + 1]] := c[1];
|
|
848
|
+
fi;
|
|
849
|
+
od;
|
|
850
|
+
dom := [1 .. deg];
|
|
851
|
+
# Map everything else to itself.
|
|
852
|
+
for i in dom do
|
|
853
|
+
if not IsBound(image[i]) then
|
|
854
|
+
image[i] := i;
|
|
855
|
+
fi;
|
|
856
|
+
od;
|
|
857
|
+
return PartialPerm(dom, image);
|
|
858
|
+
end;
|
|
859
|
+
|
|
860
|
+
InstallMethod(EUnitaryInverseCover, "for a semigroup",
|
|
861
|
+
[IsSemigroup],
|
|
862
|
+
function(S)
|
|
863
|
+
local cov, iso, T;
|
|
864
|
+
if not IsInverseSemigroup(S) then
|
|
865
|
+
ErrorNoReturn("the argument must be an inverse semigroup");
|
|
866
|
+
fi;
|
|
867
|
+
iso := IsomorphismPartialPermSemigroup(S);
|
|
868
|
+
T := Range(iso);
|
|
869
|
+
cov := EUnitaryInverseCover(T);
|
|
870
|
+
return CompositionMapping(InverseGeneralMapping(iso), cov);
|
|
871
|
+
end);
|
|
872
|
+
|
|
873
|
+
###############################################################################
|
|
874
|
+
# TODO(later):
|
|
875
|
+
# 1) Write hash function that works when the MTSGroup is not a perm group.
|
|
876
|
+
# 2) Consider hash function for improvements.
|
|
877
|
+
# 3) Write OrderIdeal and FindOrderIrreducibleElements for digraphs package
|
|
878
|
+
# (order irreducible elements are the ones which generate the semilattice
|
|
879
|
+
# and order ideals relate to checking condition M2 from Howie).
|
|
880
|
+
# 4) Line break hints for printing MTSEs and McAlisterTripleSemigroups.
|
|
881
|
+
# 5) Implement EUnitaryInverseCover which covers with a McAlisterTriple
|
|
882
|
+
# 6) Improve EUnitaryInverseCover by finding smaller covers
|
|
883
|
+
# 7) Implement function that turns MTS over a non-perm group into one that is
|
|
884
|
+
# over a perm group.
|
|
885
|
+
# 8) Add to documentation of DigraphReverse returns a digraph where vertex i in
|
|
886
|
+
# the reverse is adjacent to j in the reverse when j is adjacent to i in the
|
|
887
|
+
# original
|
|
888
|
+
# 9) Consider shortening McAlisterTripleSemigroupX to McAlisterTripleX
|
|
889
|
+
###############################################################################
|