passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-manylinux_2_24_x86_64.manylinux_2_28_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-pc-linux-gnu-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1069 -0
- gap/pkg/semigroups/config.status +1133 -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.libs/libsemigroups-6be12ad2.so.2.0.0 +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,1078 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
# W rms-translat.gi
|
|
4
|
+
# Y Copyright (C) 2016-22 Finn Smith
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
#############################################################################
|
|
11
|
+
## This file contains special methods for translation semigroups and
|
|
12
|
+
## translational hulls of completely simple and 0-simple semigroups.
|
|
13
|
+
##
|
|
14
|
+
## These methods are based on the constructions given in
|
|
15
|
+
## Petrich, M. (1968)
|
|
16
|
+
## 'The translational hull of a completely 0-simple semigroup',
|
|
17
|
+
## Glasgow Mathematical Journal, 9(01), p. 1.
|
|
18
|
+
## doi: 10.1017/s0017089500000239
|
|
19
|
+
##
|
|
20
|
+
## A.H Clifford, Mario Petrich, (1977)
|
|
21
|
+
## 'Some classes of completely regular semigroups',
|
|
22
|
+
## Journal of Algebra, Volume 46, Issue 2, 1977, Pages 462-480,
|
|
23
|
+
## http://dx.doi.org/10.1016/0021-8693(77)90383-0.
|
|
24
|
+
#############################################################################
|
|
25
|
+
|
|
26
|
+
# TODO(later): compute translations of zero-simple semigroups using this
|
|
27
|
+
|
|
28
|
+
# TODO(later): swap Rows/Columns if one is smaller
|
|
29
|
+
|
|
30
|
+
#############################################################################
|
|
31
|
+
# 1. Internal Functions
|
|
32
|
+
#############################################################################
|
|
33
|
+
|
|
34
|
+
# Converts a pair of lists to a left translation without validation
|
|
35
|
+
SEMIGROUPS.RZMSTupleToLeftTranslation := function(S, idx_list, gp_list)
|
|
36
|
+
local zero, L, foo;
|
|
37
|
+
|
|
38
|
+
zero := MultiplicativeZero(S);
|
|
39
|
+
L := LeftTranslations(S);
|
|
40
|
+
|
|
41
|
+
foo := function(x)
|
|
42
|
+
if x = zero then
|
|
43
|
+
return zero;
|
|
44
|
+
elif idx_list[x[1]] <> 0 then
|
|
45
|
+
return RMSElement(S,
|
|
46
|
+
idx_list[x[1]],
|
|
47
|
+
gp_list[x[1]] * x[2],
|
|
48
|
+
x[3]);
|
|
49
|
+
fi;
|
|
50
|
+
return zero;
|
|
51
|
+
end;
|
|
52
|
+
return LeftTranslationNC(L, MappingByFunction(S, S, foo));
|
|
53
|
+
end;
|
|
54
|
+
|
|
55
|
+
# Converts a pair of lists to a right translation without validation
|
|
56
|
+
SEMIGROUPS.RZMSTupleToRightTranslation := function(S, idx_list, gp_list)
|
|
57
|
+
local zero, R, foo;
|
|
58
|
+
|
|
59
|
+
zero := MultiplicativeZero(S);
|
|
60
|
+
R := RightTranslations(S);
|
|
61
|
+
|
|
62
|
+
foo := function(x)
|
|
63
|
+
if x = zero then
|
|
64
|
+
return zero;
|
|
65
|
+
elif idx_list[x[3]] <> 0 then
|
|
66
|
+
return RMSElement(S,
|
|
67
|
+
x[1],
|
|
68
|
+
x[2] * gp_list[x[3]],
|
|
69
|
+
idx_list[x[3]]);
|
|
70
|
+
else
|
|
71
|
+
return zero;
|
|
72
|
+
fi;
|
|
73
|
+
end;
|
|
74
|
+
return RightTranslationNC(R, MappingByFunction(S, S, foo));
|
|
75
|
+
end;
|
|
76
|
+
|
|
77
|
+
# Converts a pair of pairs of lists to a bitranslation without validation
|
|
78
|
+
SEMIGROUPS.RZMSTupleToBitranslation := function(H, x)
|
|
79
|
+
local S, l, r;
|
|
80
|
+
|
|
81
|
+
S := UnderlyingSemigroup(H);
|
|
82
|
+
l := SEMIGROUPS.RZMSTupleToLeftTranslation(S, x[1][1], x[1][2]);
|
|
83
|
+
r := SEMIGROUPS.RZMSTupleToRightTranslation(S, x[2][1], x[2][2]);
|
|
84
|
+
|
|
85
|
+
return BitranslationNC(H, l, r);
|
|
86
|
+
end;
|
|
87
|
+
|
|
88
|
+
# Converts the transformation underlying a left translation into the arguments
|
|
89
|
+
# required for the LeftTranslationsOfNormalRMS function.
|
|
90
|
+
# Arguments are:
|
|
91
|
+
# 1. L, a left translations semigroup over a normalised RMS over a group,
|
|
92
|
+
# 2. - a dense list of length the underlying reps of left translations on S OR
|
|
93
|
+
# - a mapping on S
|
|
94
|
+
# in either case, the second argument must define a left translation on S.
|
|
95
|
+
SEMIGROUPS.LeftTransToNormalRMSTupleNC := function(L, x)
|
|
96
|
+
local S, I, G, one, group_func, trans, t, s, i;
|
|
97
|
+
|
|
98
|
+
S := UnderlyingSemigroup(L);
|
|
99
|
+
I := Rows(S);
|
|
100
|
+
G := UnderlyingSemigroup(S);
|
|
101
|
+
one := One(G);
|
|
102
|
+
group_func := [];
|
|
103
|
+
trans := [];
|
|
104
|
+
|
|
105
|
+
if IsDenseList(x) and
|
|
106
|
+
Length(x) = Length(UnderlyingRepresentatives(LeftTranslations(S))) then
|
|
107
|
+
for i in I do
|
|
108
|
+
# This relies on UnderlyingRepresentatives not being interfered with
|
|
109
|
+
t := AsListCanonical(S)[x[i]];
|
|
110
|
+
trans[i] := t![1];
|
|
111
|
+
group_func[i] := t![2];
|
|
112
|
+
od;
|
|
113
|
+
elif IsGeneralMapping(x) and Source(x) = Range(x) and Source(x) = S then
|
|
114
|
+
for i in I do
|
|
115
|
+
s := RMSElement(S, i, one, 1);
|
|
116
|
+
t := s ^ x;
|
|
117
|
+
trans[i] := t![1];
|
|
118
|
+
group_func[i] := t![2];
|
|
119
|
+
od;
|
|
120
|
+
fi;
|
|
121
|
+
return [group_func, Transformation(trans)];
|
|
122
|
+
end;
|
|
123
|
+
|
|
124
|
+
SEMIGROUPS.RightTransToNormalRMSTupleNC := function(R, x)
|
|
125
|
+
local S, J, G, one, group_func, trans, s, t, j;
|
|
126
|
+
|
|
127
|
+
S := UnderlyingSemigroup(R);
|
|
128
|
+
J := Columns(S);
|
|
129
|
+
G := UnderlyingSemigroup(S);
|
|
130
|
+
one := One(G);
|
|
131
|
+
group_func := [];
|
|
132
|
+
trans := [];
|
|
133
|
+
|
|
134
|
+
if IsDenseList(x) and
|
|
135
|
+
Length(x) = Length(UnderlyingRepresentatives(RightTranslations(S))) then
|
|
136
|
+
for j in J do
|
|
137
|
+
# This relies on UnderlyingRepresentatives not being interfered with
|
|
138
|
+
t := AsListCanonical(S)[x[j]];
|
|
139
|
+
trans[j] := t![3];
|
|
140
|
+
group_func[j] := t![2];
|
|
141
|
+
od;
|
|
142
|
+
elif IsGeneralMapping(x) and Source(x) = Range(x) and Source(x) = S then
|
|
143
|
+
for j in J do
|
|
144
|
+
s := RMSElement(S, 1, one, j);
|
|
145
|
+
t := s ^ x;
|
|
146
|
+
trans[j] := t![3];
|
|
147
|
+
group_func[j] := t![2];
|
|
148
|
+
od;
|
|
149
|
+
fi;
|
|
150
|
+
return [group_func, Transformation(trans)];
|
|
151
|
+
end;
|
|
152
|
+
|
|
153
|
+
# TODO(later): This should go somewhere else
|
|
154
|
+
SEMIGROUPS.IsNormalRMSOverGroup := function(S)
|
|
155
|
+
local mat, T, one;
|
|
156
|
+
|
|
157
|
+
if not IsReesMatrixSemigroup(S) then
|
|
158
|
+
return false;
|
|
159
|
+
fi;
|
|
160
|
+
|
|
161
|
+
T := UnderlyingSemigroup(S);
|
|
162
|
+
|
|
163
|
+
if not IsGroupAsSemigroup(T) then
|
|
164
|
+
return false;
|
|
165
|
+
fi;
|
|
166
|
+
|
|
167
|
+
mat := Matrix(S);
|
|
168
|
+
one := MultiplicativeNeutralElement(T);
|
|
169
|
+
return ForAll(mat[1], x -> x = one) and
|
|
170
|
+
ForAll(mat, x -> x[1] = one);
|
|
171
|
+
end;
|
|
172
|
+
|
|
173
|
+
# Hash translations by their underlying transformations
|
|
174
|
+
SEMIGROUPS.HashFunctionForRMSTranslations :=
|
|
175
|
+
{x, data} -> ORB_HashFunctionForTransformations(x![2], data);
|
|
176
|
+
|
|
177
|
+
# Hash linked pairs as sum of hashes
|
|
178
|
+
SEMIGROUPS.HashFunctionForRMSBitranslations := function(x, data)
|
|
179
|
+
return (SEMIGROUPS.HashFunctionForRMSTranslations(x![1], data)
|
|
180
|
+
+ SEMIGROUPS.HashFunctionForRMSTranslations(x![2], data)) mod data + 1;
|
|
181
|
+
end;
|
|
182
|
+
|
|
183
|
+
# Finds the transformations on the indices of a finite 0-simple semigroup
|
|
184
|
+
# which are candidates for translations, when combined with a function from
|
|
185
|
+
# the index sets to the group.
|
|
186
|
+
SEMIGROUPS.RZMSLinkedIndexFuncs := function(S)
|
|
187
|
+
local mat, I, M, Li, bt, tau, sigma, out;
|
|
188
|
+
|
|
189
|
+
mat := MatrixOfReesZeroMatrixSemigroup(S);
|
|
190
|
+
I := [1 .. Length(mat[1])];
|
|
191
|
+
M := [1 .. Length(mat)];
|
|
192
|
+
|
|
193
|
+
Li := List(I, i -> PositionsProperty(mat, row -> row[i] <> 0));
|
|
194
|
+
|
|
195
|
+
bt := function(k)
|
|
196
|
+
local failed, j, mu;
|
|
197
|
+
for j in Union([0], I) do
|
|
198
|
+
tau[k] := j;
|
|
199
|
+
sigma[k + 1] := [];
|
|
200
|
+
failed := false;
|
|
201
|
+
if j <> 0 then
|
|
202
|
+
for mu in Li[j] do
|
|
203
|
+
sigma[k + 1][mu] := Intersection(sigma[k][mu], Li[k]);
|
|
204
|
+
if IsEmpty(sigma[k][mu]) then
|
|
205
|
+
failed := true;
|
|
206
|
+
break;
|
|
207
|
+
fi;
|
|
208
|
+
od;
|
|
209
|
+
if not failed then
|
|
210
|
+
for mu in M do
|
|
211
|
+
if not IsBound(sigma[k + 1][mu]) then
|
|
212
|
+
sigma[k + 1][mu] := Difference(sigma[k][mu], Li[k]);
|
|
213
|
+
fi;
|
|
214
|
+
if Length(sigma[k + 1][mu]) = 0 then
|
|
215
|
+
failed := true;
|
|
216
|
+
break;
|
|
217
|
+
fi;
|
|
218
|
+
od;
|
|
219
|
+
fi;
|
|
220
|
+
else
|
|
221
|
+
for mu in M do
|
|
222
|
+
sigma[k + 1][mu] := Difference(sigma[k][mu], Li[k]);
|
|
223
|
+
if Length(sigma[k + 1][mu]) = 0 then
|
|
224
|
+
failed := true;
|
|
225
|
+
break;
|
|
226
|
+
fi;
|
|
227
|
+
od;
|
|
228
|
+
fi;
|
|
229
|
+
if failed then
|
|
230
|
+
continue;
|
|
231
|
+
fi;
|
|
232
|
+
if k = Length(I) then
|
|
233
|
+
Add(out, [ShallowCopy(tau), IteratorOfCartesianProduct(sigma[k + 1])]);
|
|
234
|
+
else
|
|
235
|
+
bt(k + 1);
|
|
236
|
+
fi;
|
|
237
|
+
od;
|
|
238
|
+
end;
|
|
239
|
+
|
|
240
|
+
tau := [];
|
|
241
|
+
sigma := [List(M, x -> Union([0], M))];
|
|
242
|
+
out := [];
|
|
243
|
+
bt(1);
|
|
244
|
+
return out;
|
|
245
|
+
end;
|
|
246
|
+
|
|
247
|
+
SEMIGROUPS.RZMSLinkingGraph := function(S, tau, sigma)
|
|
248
|
+
local r, mat, D, i, mu;
|
|
249
|
+
|
|
250
|
+
r := Size(Rows(S));
|
|
251
|
+
mat := MatrixOfReesZeroMatrixSemigroup(S);
|
|
252
|
+
D := NullDigraph(IsMutableDigraph, Length(Rows(S)) + Length(Columns(S)));
|
|
253
|
+
|
|
254
|
+
for i in Rows(S) do
|
|
255
|
+
if tau[i] <> 0 then
|
|
256
|
+
for mu in Columns(S) do
|
|
257
|
+
if sigma[mu] <> 0 then
|
|
258
|
+
if mat[mu][tau[i]] <> 0 then
|
|
259
|
+
DigraphAddEdges(D, [[i, mu + r], [mu + r, i]]);
|
|
260
|
+
fi;
|
|
261
|
+
fi;
|
|
262
|
+
od;
|
|
263
|
+
fi;
|
|
264
|
+
od;
|
|
265
|
+
|
|
266
|
+
return D;
|
|
267
|
+
end;
|
|
268
|
+
|
|
269
|
+
SEMIGROUPS.RZMSGroupLinkingConditions := function(S, tau, sigma)
|
|
270
|
+
local D, sccs, reps, r, rep, dive, mat, conditions, row_definitions,
|
|
271
|
+
column_definitions, e, cc;
|
|
272
|
+
|
|
273
|
+
D := SEMIGROUPS.RZMSLinkingGraph(S, tau, sigma);
|
|
274
|
+
sccs := DigraphStronglyConnectedComponents(D);
|
|
275
|
+
reps := [];
|
|
276
|
+
|
|
277
|
+
r := Length(Rows(S));
|
|
278
|
+
|
|
279
|
+
for cc in Filtered(sccs.comps, x -> Size(x) > 1) do
|
|
280
|
+
rep := cc[1];
|
|
281
|
+
if rep > r then
|
|
282
|
+
rep := OutNeighboursOfVertex(D, rep)[1];
|
|
283
|
+
fi;
|
|
284
|
+
Add(reps, rep);
|
|
285
|
+
od;
|
|
286
|
+
|
|
287
|
+
dive := function(v, scc_rep)
|
|
288
|
+
local y, z, defns, x, w;
|
|
289
|
+
if v <= r then
|
|
290
|
+
y := row_definitions[v];
|
|
291
|
+
else
|
|
292
|
+
y := column_definitions[v - r];
|
|
293
|
+
fi;
|
|
294
|
+
for w in OutNeighboursOfVertex(D, v) do
|
|
295
|
+
if w <= r then
|
|
296
|
+
z := w;
|
|
297
|
+
defns := row_definitions;
|
|
298
|
+
x := [mat[v - r][tau[w]] ^ -1 * y[1], y[2] * mat[sigma[v - r]][w]];
|
|
299
|
+
else
|
|
300
|
+
z := w - r;
|
|
301
|
+
defns := column_definitions;
|
|
302
|
+
x := [mat[z][tau[v]] * y[1], y[2] * mat[sigma[z]][v] ^ -1];
|
|
303
|
+
fi;
|
|
304
|
+
if IsBound(defns[z]) then
|
|
305
|
+
Add(conditions[scc_rep], [defns[z], x]);
|
|
306
|
+
else
|
|
307
|
+
defns[z] := x;
|
|
308
|
+
dive(w, scc_rep);
|
|
309
|
+
fi;
|
|
310
|
+
od;
|
|
311
|
+
end;
|
|
312
|
+
|
|
313
|
+
mat := MatrixOfReesZeroMatrixSemigroup(S);
|
|
314
|
+
conditions := List([1 .. r], x -> []);
|
|
315
|
+
row_definitions := [];
|
|
316
|
+
column_definitions := [];
|
|
317
|
+
e := One(UnderlyingSemigroup(S));
|
|
318
|
+
|
|
319
|
+
for rep in reps do
|
|
320
|
+
row_definitions[rep] := [e, e];
|
|
321
|
+
dive(rep, rep);
|
|
322
|
+
od;
|
|
323
|
+
|
|
324
|
+
return rec(reps := reps,
|
|
325
|
+
sccs := sccs,
|
|
326
|
+
conditions := conditions,
|
|
327
|
+
row_definitions := row_definitions,
|
|
328
|
+
column_definitions := column_definitions);
|
|
329
|
+
end;
|
|
330
|
+
|
|
331
|
+
SEMIGROUPS.RZMSLinkedGroupFunctions := function(S, tau, sigma)
|
|
332
|
+
local r, conds, conditions, allowed_vals, reps, vals, keep, sccs, comps,
|
|
333
|
+
ids, row_definitions, column_definitions, out, phi, psi, rep, z, cond, g, tup,
|
|
334
|
+
i, v;
|
|
335
|
+
|
|
336
|
+
r := Length(Rows(S));
|
|
337
|
+
|
|
338
|
+
conds := SEMIGROUPS.RZMSGroupLinkingConditions(S, tau, sigma);
|
|
339
|
+
conditions := conds.conditions;
|
|
340
|
+
allowed_vals := [];
|
|
341
|
+
reps := conds.reps;
|
|
342
|
+
for rep in reps do
|
|
343
|
+
vals := AsList(UnderlyingSemigroup(S));
|
|
344
|
+
for cond in conditions[rep] do
|
|
345
|
+
keep := [];
|
|
346
|
+
for g in vals do
|
|
347
|
+
if cond[1][1] * g * cond[1][2] = cond[2][1] * g * cond[2][2] then
|
|
348
|
+
Add(keep, g);
|
|
349
|
+
fi;
|
|
350
|
+
od;
|
|
351
|
+
vals := keep;
|
|
352
|
+
if IsEmpty(vals) then
|
|
353
|
+
break;
|
|
354
|
+
fi;
|
|
355
|
+
od;
|
|
356
|
+
Add(allowed_vals, vals);
|
|
357
|
+
od;
|
|
358
|
+
if Length(allowed_vals) <> Length(reps) or ForAny(allowed_vals, IsEmpty) then
|
|
359
|
+
return [];
|
|
360
|
+
fi;
|
|
361
|
+
|
|
362
|
+
sccs := conds.sccs;
|
|
363
|
+
comps := sccs.comps;
|
|
364
|
+
ids := sccs.id;
|
|
365
|
+
row_definitions := conds.row_definitions;
|
|
366
|
+
column_definitions := conds.column_definitions;
|
|
367
|
+
|
|
368
|
+
out := [];
|
|
369
|
+
for tup in EnumeratorOfCartesianProduct(allowed_vals) do
|
|
370
|
+
phi := [];
|
|
371
|
+
psi := [];
|
|
372
|
+
for i in [1 .. Size(reps)] do
|
|
373
|
+
rep := reps[i];
|
|
374
|
+
for v in comps[ids[rep]] do
|
|
375
|
+
if v <= r then
|
|
376
|
+
phi[v] := row_definitions[v][1] * tup[i] * row_definitions[v][2];
|
|
377
|
+
else
|
|
378
|
+
z := v - r;
|
|
379
|
+
psi[z] := column_definitions[z][1] *
|
|
380
|
+
tup[i] *
|
|
381
|
+
column_definitions[z][2];
|
|
382
|
+
fi;
|
|
383
|
+
od;
|
|
384
|
+
od;
|
|
385
|
+
Add(out, [phi, psi]);
|
|
386
|
+
od;
|
|
387
|
+
return out;
|
|
388
|
+
end;
|
|
389
|
+
|
|
390
|
+
SEMIGROUPS.BitranslationsRZMS := function(H, opt...)
|
|
391
|
+
local S, out, idx_funcs, nr_only, nr, tau, sigma_it, sigma, gp_funcs,
|
|
392
|
+
empty_bitrans, x, y;
|
|
393
|
+
|
|
394
|
+
S := UnderlyingSemigroup(H);
|
|
395
|
+
out := [];
|
|
396
|
+
idx_funcs := SEMIGROUPS.RZMSLinkedIndexFuncs(S);
|
|
397
|
+
nr_only := opt = ["nr_only"];
|
|
398
|
+
nr := 0;
|
|
399
|
+
|
|
400
|
+
for x in idx_funcs do
|
|
401
|
+
tau := x[1];
|
|
402
|
+
sigma_it := x[2];
|
|
403
|
+
while not IsDoneIterator(sigma_it) do
|
|
404
|
+
sigma := NextIterator(sigma_it);
|
|
405
|
+
gp_funcs := SEMIGROUPS.RZMSLinkedGroupFunctions(S, tau, sigma);
|
|
406
|
+
if nr_only then
|
|
407
|
+
nr := nr + Length(gp_funcs);
|
|
408
|
+
else
|
|
409
|
+
for y in gp_funcs do
|
|
410
|
+
Add(out, [[tau, y[1]], [sigma, y[2]]]);
|
|
411
|
+
od;
|
|
412
|
+
fi;
|
|
413
|
+
od;
|
|
414
|
+
od;
|
|
415
|
+
|
|
416
|
+
if nr_only then
|
|
417
|
+
return nr + 1;
|
|
418
|
+
fi;
|
|
419
|
+
|
|
420
|
+
empty_bitrans := [[List(Rows(S), x -> 0), []],
|
|
421
|
+
[List(Columns(S), x -> 0), []]];
|
|
422
|
+
Add(out, empty_bitrans);
|
|
423
|
+
|
|
424
|
+
Apply(out, x -> SEMIGROUPS.RZMSTupleToBitranslation(H, x));
|
|
425
|
+
|
|
426
|
+
return out;
|
|
427
|
+
end;
|
|
428
|
+
|
|
429
|
+
SEMIGROUPS.NormalRMSInitialisedLinkedFuncs :=
|
|
430
|
+
function(S, G, mat, mat_inv_rows, c, d_inv, x, y)
|
|
431
|
+
local I, M, tau, sigma, g_pos, bt, out, mu;
|
|
432
|
+
|
|
433
|
+
I := Rows(S);
|
|
434
|
+
M := Columns(S);
|
|
435
|
+
tau := [x];
|
|
436
|
+
sigma := List(I, i -> List(M, mu -> ShallowCopy(M)));
|
|
437
|
+
sigma[1][1] := [y];
|
|
438
|
+
|
|
439
|
+
for mu in [2 .. Length(M)] do
|
|
440
|
+
g_pos := PositionCanonical(G, d_inv[mu] * mat[mu][x] * c[1]);
|
|
441
|
+
sigma[1][mu] := mat_inv_rows[1][g_pos];
|
|
442
|
+
if IsEmpty(sigma[1][mu]) then
|
|
443
|
+
return [];
|
|
444
|
+
fi;
|
|
445
|
+
od;
|
|
446
|
+
|
|
447
|
+
bt := function(k)
|
|
448
|
+
local g_pos, consistent, j, mu, tup;
|
|
449
|
+
if k = Length(I) + 1 then
|
|
450
|
+
for tup in EnumeratorOfCartesianProduct(sigma[k - 1]) do
|
|
451
|
+
Add(out, [ShallowCopy(tau), ShallowCopy(tup)]);
|
|
452
|
+
od;
|
|
453
|
+
return;
|
|
454
|
+
fi;
|
|
455
|
+
for j in I do
|
|
456
|
+
consistent := true;
|
|
457
|
+
tau[k] := j;
|
|
458
|
+
for mu in M do
|
|
459
|
+
g_pos := PositionCanonical(G, d_inv[mu] * mat[mu][j] * c[k]);
|
|
460
|
+
sigma[k][mu] := Intersection(sigma[k - 1][mu],
|
|
461
|
+
mat_inv_rows[k][g_pos]);
|
|
462
|
+
if IsEmpty(sigma[k][mu]) then
|
|
463
|
+
consistent := false;
|
|
464
|
+
break;
|
|
465
|
+
fi;
|
|
466
|
+
od;
|
|
467
|
+
if consistent then
|
|
468
|
+
bt(k + 1);
|
|
469
|
+
fi;
|
|
470
|
+
od;
|
|
471
|
+
end;
|
|
472
|
+
|
|
473
|
+
out := [];
|
|
474
|
+
bt(2);
|
|
475
|
+
return out;
|
|
476
|
+
end;
|
|
477
|
+
|
|
478
|
+
SEMIGROUPS.NormalRMSLinkedTriples := function(S, opt...)
|
|
479
|
+
local I, M, iso, inv, G, mat, nr_only, inv_rows, out, b, d_inv, c,
|
|
480
|
+
linked_funcs, i, mu, a, x, y, func_pair;
|
|
481
|
+
|
|
482
|
+
I := Rows(S);
|
|
483
|
+
M := Columns(S);
|
|
484
|
+
|
|
485
|
+
iso := IsomorphismPermGroup(UnderlyingSemigroup(S));
|
|
486
|
+
inv := InverseGeneralMapping(iso);
|
|
487
|
+
G := Semigroup(List(Generators(Range(iso)), AsTransformation));
|
|
488
|
+
|
|
489
|
+
mat := StructuralCopy(MatrixOfReesMatrixSemigroup(S));
|
|
490
|
+
mat := List(mat, row -> List(row, x -> AsTransformation(x ^ iso)));
|
|
491
|
+
|
|
492
|
+
nr_only := opt = ["nr_only"];
|
|
493
|
+
|
|
494
|
+
inv_rows := List(I, x -> List(G, y -> []));
|
|
495
|
+
for i in I do
|
|
496
|
+
for mu in M do
|
|
497
|
+
Add(inv_rows[i][PositionCanonical(G, mat[mu][i])], mu);
|
|
498
|
+
od;
|
|
499
|
+
od;
|
|
500
|
+
|
|
501
|
+
out := [];
|
|
502
|
+
if nr_only then
|
|
503
|
+
out := 0;
|
|
504
|
+
fi;
|
|
505
|
+
|
|
506
|
+
for a in G do
|
|
507
|
+
b := AsPermutation(a) ^ inv;
|
|
508
|
+
for x in I do
|
|
509
|
+
d_inv := List(M, mu -> (mat[mu][x] * a) ^ -1);
|
|
510
|
+
for y in M do
|
|
511
|
+
c := List(I, i -> a * mat[y][i]);
|
|
512
|
+
linked_funcs := SEMIGROUPS.NormalRMSInitialisedLinkedFuncs(S,
|
|
513
|
+
G,
|
|
514
|
+
mat,
|
|
515
|
+
inv_rows,
|
|
516
|
+
c,
|
|
517
|
+
d_inv,
|
|
518
|
+
x,
|
|
519
|
+
y);
|
|
520
|
+
if nr_only then
|
|
521
|
+
out := out + Length(linked_funcs);
|
|
522
|
+
else
|
|
523
|
+
for func_pair in linked_funcs do
|
|
524
|
+
Add(out, Concatenation([b], func_pair));
|
|
525
|
+
od;
|
|
526
|
+
fi;
|
|
527
|
+
od;
|
|
528
|
+
od;
|
|
529
|
+
od;
|
|
530
|
+
return out;
|
|
531
|
+
end;
|
|
532
|
+
|
|
533
|
+
SEMIGROUPS.BitranslationsNormalRMS := function(H, opt...)
|
|
534
|
+
local S, out, nr_only, triple;
|
|
535
|
+
|
|
536
|
+
S := UnderlyingSemigroup(H);
|
|
537
|
+
|
|
538
|
+
H := TranslationalHull(S);
|
|
539
|
+
out := [];
|
|
540
|
+
nr_only := opt = ["nr_only"];
|
|
541
|
+
|
|
542
|
+
if nr_only then
|
|
543
|
+
return SEMIGROUPS.NormalRMSLinkedTriples(S, opt[1]);
|
|
544
|
+
fi;
|
|
545
|
+
|
|
546
|
+
for triple in SEMIGROUPS.NormalRMSLinkedTriples(S) do
|
|
547
|
+
triple := Concatenation([triple[1]],
|
|
548
|
+
List(triple{[2, 3]}, Transformation));
|
|
549
|
+
Add(out, _BitranslationOfNormalRMSByTripleNC(H, triple));
|
|
550
|
+
od;
|
|
551
|
+
return out;
|
|
552
|
+
end;
|
|
553
|
+
|
|
554
|
+
SEMIGROUPS.FamOfRMSLeftTranslationsByTriple := function()
|
|
555
|
+
local fam, type;
|
|
556
|
+
|
|
557
|
+
fam := NewFamily("LeftTranslationsSemigroupElementsFamily",
|
|
558
|
+
_IsLeftTranslationOfNormalRMS);
|
|
559
|
+
type := NewType(fam, _IsLeftTranslationOfNormalRMS);
|
|
560
|
+
fam!.type := type;
|
|
561
|
+
return fam;
|
|
562
|
+
end;
|
|
563
|
+
|
|
564
|
+
SEMIGROUPS.FamOfRMSRightTranslationsByTriple := function()
|
|
565
|
+
local fam, type;
|
|
566
|
+
|
|
567
|
+
fam := NewFamily("RightTranslationsSemigroupElementsFamily",
|
|
568
|
+
_IsRightTranslationOfNormalRMS);
|
|
569
|
+
type := NewType(fam, _IsRightTranslationOfNormalRMS);
|
|
570
|
+
fam!.type := type;
|
|
571
|
+
return fam;
|
|
572
|
+
end;
|
|
573
|
+
|
|
574
|
+
SEMIGROUPS.FamOfRMSBitranslationsByTriple := function()
|
|
575
|
+
local fam, type;
|
|
576
|
+
|
|
577
|
+
fam := NewFamily("BitranslationsSemigroupElementsFamily",
|
|
578
|
+
_IsBitranslationOfNormalRMS);
|
|
579
|
+
type := NewType(fam, _IsBitranslationOfNormalRMS);
|
|
580
|
+
fam!.type := type;
|
|
581
|
+
return fam;
|
|
582
|
+
end;
|
|
583
|
+
|
|
584
|
+
#############################################################################
|
|
585
|
+
# 2. Methods for (zero) simple semigroups
|
|
586
|
+
#############################################################################
|
|
587
|
+
|
|
588
|
+
# The generators are generators of a partial transformation monoid to act on the
|
|
589
|
+
# index sets, together with functions to the generators of the group.
|
|
590
|
+
InstallMethod(GeneratorsOfSemigroup,
|
|
591
|
+
"for the semigroup of left/right translations of a finite 0-simple semigroup",
|
|
592
|
+
[IsTranslationsSemigroup and IsWholeFamily],
|
|
593
|
+
function(T)
|
|
594
|
+
local S, iso, inv, rms, zero, left_trans, n, gens, G, group_gens, f, fa, t, a;
|
|
595
|
+
|
|
596
|
+
S := UnderlyingSemigroup(T);
|
|
597
|
+
if not (IsZeroSimpleSemigroup(S) and IsFinite(S)) then
|
|
598
|
+
TryNextMethod();
|
|
599
|
+
fi;
|
|
600
|
+
|
|
601
|
+
iso := IsomorphismReesZeroMatrixSemigroup(S);
|
|
602
|
+
inv := InverseGeneralMapping(iso);
|
|
603
|
+
rms := Range(iso);
|
|
604
|
+
zero := MultiplicativeZero(rms);
|
|
605
|
+
left_trans := IsLeftTranslationsSemigroup(T);
|
|
606
|
+
|
|
607
|
+
if left_trans then
|
|
608
|
+
n := Length(Rows(rms));
|
|
609
|
+
else
|
|
610
|
+
n := Length(Columns(rms));
|
|
611
|
+
fi;
|
|
612
|
+
|
|
613
|
+
gens := [];
|
|
614
|
+
G := UnderlyingSemigroup(rms);
|
|
615
|
+
group_gens := GeneratorsOfGroup(G);
|
|
616
|
+
|
|
617
|
+
for t in GeneratorsOfSemigroup(PartialTransformationMonoid(n)) do
|
|
618
|
+
if left_trans then
|
|
619
|
+
f := function(x)
|
|
620
|
+
if (x = zero or x[1] ^ t = n + 1) then
|
|
621
|
+
return zero;
|
|
622
|
+
fi;
|
|
623
|
+
return ReesMatrixSemigroupElement(rms, x[1] ^ t,
|
|
624
|
+
x[2], x[3]);
|
|
625
|
+
end;
|
|
626
|
+
Add(gens, LeftTranslationNC(T, CompositionMapping(inv,
|
|
627
|
+
MappingByFunction(rms, rms, f),
|
|
628
|
+
iso)));
|
|
629
|
+
else
|
|
630
|
+
f := function(x)
|
|
631
|
+
if (x = zero or x[3] ^ t = n + 1) then
|
|
632
|
+
return zero;
|
|
633
|
+
fi;
|
|
634
|
+
return ReesMatrixSemigroupElement(rms, x[1],
|
|
635
|
+
x[2], x[3] ^ t);
|
|
636
|
+
end;
|
|
637
|
+
Add(gens, RightTranslationNC(T, CompositionMapping(inv,
|
|
638
|
+
MappingByFunction(rms, rms, f),
|
|
639
|
+
iso)));
|
|
640
|
+
fi;
|
|
641
|
+
od;
|
|
642
|
+
|
|
643
|
+
for a in group_gens do
|
|
644
|
+
fa := function(x)
|
|
645
|
+
if x = 1 then
|
|
646
|
+
return a;
|
|
647
|
+
fi;
|
|
648
|
+
return MultiplicativeNeutralElement(G);
|
|
649
|
+
end;
|
|
650
|
+
if left_trans then
|
|
651
|
+
f := function(x)
|
|
652
|
+
if x = zero then
|
|
653
|
+
return zero;
|
|
654
|
+
fi;
|
|
655
|
+
return ReesMatrixSemigroupElement(rms, x[1],
|
|
656
|
+
fa(x[1]) * x[2], x[3]);
|
|
657
|
+
end;
|
|
658
|
+
Add(gens, LeftTranslationNC(T, CompositionMapping(inv,
|
|
659
|
+
MappingByFunction(rms, rms, f),
|
|
660
|
+
iso)));
|
|
661
|
+
else
|
|
662
|
+
f := function(x)
|
|
663
|
+
if x = zero then
|
|
664
|
+
return zero;
|
|
665
|
+
fi;
|
|
666
|
+
return ReesMatrixSemigroupElement(rms, x[1],
|
|
667
|
+
x[2] * fa(x[3]), x[3]);
|
|
668
|
+
end;
|
|
669
|
+
Add(gens, RightTranslationNC(T, CompositionMapping(
|
|
670
|
+
inv, MappingByFunction(rms, rms, f), iso)));
|
|
671
|
+
fi;
|
|
672
|
+
od;
|
|
673
|
+
return gens;
|
|
674
|
+
end);
|
|
675
|
+
|
|
676
|
+
# The generators are generators of a full transformation monoid to act on the
|
|
677
|
+
# index sets, together with functions to the generators of the group.
|
|
678
|
+
InstallMethod(GeneratorsOfSemigroup,
|
|
679
|
+
"for the semigroup of left/right translations of a finite simple semigroup",
|
|
680
|
+
[IsTranslationsSemigroup and IsWholeFamily],
|
|
681
|
+
function(T)
|
|
682
|
+
local S, iso, inv, rms, L, n, gens, G, group_gens, IsNRMS, idgroup_func, f,
|
|
683
|
+
fa, t, a;
|
|
684
|
+
|
|
685
|
+
S := UnderlyingSemigroup(T);
|
|
686
|
+
if not (IsSimpleSemigroup(S) and IsFinite(S)) then
|
|
687
|
+
TryNextMethod();
|
|
688
|
+
fi;
|
|
689
|
+
|
|
690
|
+
iso := IsomorphismReesMatrixSemigroup(S);
|
|
691
|
+
inv := InverseGeneralMapping(iso);
|
|
692
|
+
rms := Range(iso);
|
|
693
|
+
L := IsLeftTranslationsSemigroup(T);
|
|
694
|
+
|
|
695
|
+
if L then
|
|
696
|
+
n := Length(Rows(rms));
|
|
697
|
+
else
|
|
698
|
+
n := Length(Columns(rms));
|
|
699
|
+
fi;
|
|
700
|
+
gens := [];
|
|
701
|
+
G := UnderlyingSemigroup(rms);
|
|
702
|
+
group_gens := GeneratorsOfGroup(G);
|
|
703
|
+
|
|
704
|
+
IsNRMS := SEMIGROUPS.IsNormalRMSOverGroup(S);
|
|
705
|
+
if IsNRMS then
|
|
706
|
+
idgroup_func := List([1 .. n], i -> MultiplicativeNeutralElement(G));
|
|
707
|
+
fi;
|
|
708
|
+
|
|
709
|
+
for t in GeneratorsOfSemigroup(FullTransformationMonoid(n)) do
|
|
710
|
+
if L then
|
|
711
|
+
if IsNRMS then
|
|
712
|
+
Add(gens, LeftTranslationNC(T, idgroup_func, t));
|
|
713
|
+
else
|
|
714
|
+
f := function(x)
|
|
715
|
+
return ReesMatrixSemigroupElement(rms, x[1] ^ t,
|
|
716
|
+
x[2], x[3]);
|
|
717
|
+
end;
|
|
718
|
+
Add(gens, LeftTranslationNC(T, CompositionMapping(inv,
|
|
719
|
+
MappingByFunction(rms, rms, f),
|
|
720
|
+
iso)));
|
|
721
|
+
fi;
|
|
722
|
+
else
|
|
723
|
+
if IsNRMS then
|
|
724
|
+
Add(gens, RightTranslationNC(T, idgroup_func, t));
|
|
725
|
+
else
|
|
726
|
+
f := function(x)
|
|
727
|
+
return ReesMatrixSemigroupElement(rms, x[1],
|
|
728
|
+
x[2], x[3] ^ t);
|
|
729
|
+
end;
|
|
730
|
+
Add(gens, RightTranslationNC(T,
|
|
731
|
+
CompositionMapping(inv,
|
|
732
|
+
MappingByFunction(rms, rms, f),
|
|
733
|
+
iso)));
|
|
734
|
+
fi;
|
|
735
|
+
fi;
|
|
736
|
+
od;
|
|
737
|
+
|
|
738
|
+
for a in group_gens do
|
|
739
|
+
fa := function(x) # gaplint: disable=W047
|
|
740
|
+
if x = 1 then
|
|
741
|
+
return a;
|
|
742
|
+
fi;
|
|
743
|
+
return MultiplicativeNeutralElement(G);
|
|
744
|
+
end;
|
|
745
|
+
if L then
|
|
746
|
+
if IsNRMS then
|
|
747
|
+
Add(gens, LeftTranslationNC(T,
|
|
748
|
+
List([1 .. n], fa),
|
|
749
|
+
IdentityTransformation));
|
|
750
|
+
else
|
|
751
|
+
f := function(x)
|
|
752
|
+
return ReesMatrixSemigroupElement(rms, x[1],
|
|
753
|
+
fa(x[1]) * x[2], x[3]);
|
|
754
|
+
end;
|
|
755
|
+
Add(gens, LeftTranslationNC(T, CompositionMapping(inv,
|
|
756
|
+
MappingByFunction(rms, rms, f),
|
|
757
|
+
iso)));
|
|
758
|
+
fi;
|
|
759
|
+
else
|
|
760
|
+
if IsNRMS then
|
|
761
|
+
Add(gens, RightTranslationNC(T,
|
|
762
|
+
List([1 .. n], fa),
|
|
763
|
+
IdentityTransformation));
|
|
764
|
+
else
|
|
765
|
+
f := function(x)
|
|
766
|
+
return ReesMatrixSemigroupElement(rms, x[1],
|
|
767
|
+
x[2] * fa(x[3]), x[3]);
|
|
768
|
+
end;
|
|
769
|
+
Add(gens, RightTranslationNC(T,
|
|
770
|
+
CompositionMapping(inv,
|
|
771
|
+
MappingByFunction(rms, rms, f),
|
|
772
|
+
iso)));
|
|
773
|
+
fi;
|
|
774
|
+
fi;
|
|
775
|
+
od;
|
|
776
|
+
return gens;
|
|
777
|
+
end);
|
|
778
|
+
|
|
779
|
+
InstallMethod(Size,
|
|
780
|
+
"for the semigroup of translations of a completely 0-simple semigroup",
|
|
781
|
+
[IsTranslationsSemigroup and IsWholeFamily],
|
|
782
|
+
1, # To beat the method for arbitrary underlying semigroups which calls AsList
|
|
783
|
+
function(T)
|
|
784
|
+
local S, G, rms, n;
|
|
785
|
+
S := UnderlyingSemigroup(T);
|
|
786
|
+
if not (IsZeroSimpleSemigroup(S) and IsFinite(S)) then
|
|
787
|
+
TryNextMethod();
|
|
788
|
+
fi;
|
|
789
|
+
rms := Range(IsomorphismReesZeroMatrixSemigroup(S));
|
|
790
|
+
G := UnderlyingSemigroup(rms);
|
|
791
|
+
if IsLeftTranslationsSemigroup(T) then
|
|
792
|
+
n := Length(Rows(rms));
|
|
793
|
+
else
|
|
794
|
+
n := Length(Columns(rms));
|
|
795
|
+
fi;
|
|
796
|
+
return (n * Size(G) + 1) ^ n;
|
|
797
|
+
end);
|
|
798
|
+
|
|
799
|
+
InstallMethod(Size,
|
|
800
|
+
"for the semigroup of translations of a completely simple semigroup",
|
|
801
|
+
[IsTranslationsSemigroup and IsWholeFamily],
|
|
802
|
+
1, # To beat the method for arbitrary underlying semigroups which calls AsList
|
|
803
|
+
function(T)
|
|
804
|
+
local S, G, rms, n;
|
|
805
|
+
S := UnderlyingSemigroup(T);
|
|
806
|
+
if not (IsSimpleSemigroup(S) and IsFinite(S)) then
|
|
807
|
+
TryNextMethod();
|
|
808
|
+
fi;
|
|
809
|
+
rms := Range(IsomorphismReesMatrixSemigroup(S));
|
|
810
|
+
G := UnderlyingSemigroup(rms);
|
|
811
|
+
if IsLeftTranslationsSemigroup(T) then
|
|
812
|
+
n := Length(Rows(rms));
|
|
813
|
+
else
|
|
814
|
+
n := Length(Columns(rms));
|
|
815
|
+
fi;
|
|
816
|
+
return n ^ n * Size(G) ^ n;
|
|
817
|
+
end);
|
|
818
|
+
|
|
819
|
+
# Create a left translation of an IxJ normalised RMS over a group G.
|
|
820
|
+
# L should be a left translations semigroup
|
|
821
|
+
# group_func should be a function (represented as a list) from I to G
|
|
822
|
+
# t should be a transformation of I
|
|
823
|
+
InstallOtherMethod(LeftTranslation,
|
|
824
|
+
"for a semigroup of left translations, a dense list, and a transformation",
|
|
825
|
+
[_IsLeftTranslationOfNormalRMSSemigroup, IsDenseList, IsTransformation],
|
|
826
|
+
function(L, group_func, t)
|
|
827
|
+
local S, G;
|
|
828
|
+
|
|
829
|
+
S := UnderlyingSemigroup(L);
|
|
830
|
+
G := UnderlyingSemigroup(S);
|
|
831
|
+
|
|
832
|
+
if not (IsList(group_func) and
|
|
833
|
+
ForAll(group_func, x -> x in G) and
|
|
834
|
+
Size(group_func) = Size(Matrix(S)[1])) then
|
|
835
|
+
ErrorNoReturn("the second argument must be a list of group elements ",
|
|
836
|
+
"of length equal to the number of rows of the underlying ",
|
|
837
|
+
"semigroup of the first argument");
|
|
838
|
+
fi;
|
|
839
|
+
|
|
840
|
+
if not (IsTransformation(t) and
|
|
841
|
+
DegreeOfTransformation(t) <= Size(Matrix(S)[1])) then
|
|
842
|
+
ErrorNoReturn("the third argument must be a transformation on ",
|
|
843
|
+
"the number of rows of the underlying semigroup of the ",
|
|
844
|
+
"first argument");
|
|
845
|
+
fi;
|
|
846
|
+
|
|
847
|
+
return LeftTranslationNC(L, group_func, t);
|
|
848
|
+
end);
|
|
849
|
+
|
|
850
|
+
InstallGlobalFunction(_LeftTranslationOfNormalRMSNC,
|
|
851
|
+
function(L, x, opt...)
|
|
852
|
+
local tup, group_func, t;
|
|
853
|
+
|
|
854
|
+
if IsEmpty(opt) then
|
|
855
|
+
tup := SEMIGROUPS.LeftTransToNormalRMSTupleNC(L, x);
|
|
856
|
+
group_func := tup[1];
|
|
857
|
+
t := tup[2];
|
|
858
|
+
else
|
|
859
|
+
group_func := x;
|
|
860
|
+
t := opt[1];
|
|
861
|
+
fi;
|
|
862
|
+
|
|
863
|
+
return Objectify(TypeLeftTranslationsSemigroupElements(L),
|
|
864
|
+
[group_func, t]);
|
|
865
|
+
end);
|
|
866
|
+
|
|
867
|
+
# Create a right translation of an IxJ normalised RMS over a group G.
|
|
868
|
+
# R should be a right translations semigroup
|
|
869
|
+
# group_func should be a function (represented as a list) from J to G
|
|
870
|
+
# t should be a transformation of J
|
|
871
|
+
InstallOtherMethod(RightTranslation,
|
|
872
|
+
"for a semigroup of right translations, a dense list, and a transformation",
|
|
873
|
+
[_IsRightTranslationOfNormalRMSSemigroup, IsDenseList, IsTransformation],
|
|
874
|
+
function(R, group_func, t)
|
|
875
|
+
local S, G;
|
|
876
|
+
|
|
877
|
+
S := UnderlyingSemigroup(R);
|
|
878
|
+
G := UnderlyingSemigroup(S);
|
|
879
|
+
|
|
880
|
+
if not (IsList(group_func) and
|
|
881
|
+
ForAll(group_func, x -> x in G) and
|
|
882
|
+
Size(group_func) = Size(MatrixOfReesMatrixSemigroup(S))) then
|
|
883
|
+
ErrorNoReturn("the second argument must be a list of group elements ",
|
|
884
|
+
"of length equal to the number of rows of the underlying ",
|
|
885
|
+
"semigroup of the first argument");
|
|
886
|
+
elif not (IsTransformation(t) and
|
|
887
|
+
DegreeOfTransformation(t) <= Size(Matrix(S))) then
|
|
888
|
+
ErrorNoReturn("the third argument must be a transformation on ",
|
|
889
|
+
"the number of columns of the underlying semigroup of the ",
|
|
890
|
+
"first argument");
|
|
891
|
+
fi;
|
|
892
|
+
|
|
893
|
+
return _RightTranslationOfNormalRMSNC(R, group_func, t);
|
|
894
|
+
end);
|
|
895
|
+
|
|
896
|
+
InstallGlobalFunction(_RightTranslationOfNormalRMSNC,
|
|
897
|
+
function(R, x, opt...)
|
|
898
|
+
local tup, group_func, t;
|
|
899
|
+
|
|
900
|
+
if IsEmpty(opt) then
|
|
901
|
+
tup := SEMIGROUPS.RightTransToNormalRMSTupleNC(R, x);
|
|
902
|
+
group_func := tup[1];
|
|
903
|
+
t := tup[2];
|
|
904
|
+
else
|
|
905
|
+
group_func := x;
|
|
906
|
+
t := opt[1];
|
|
907
|
+
fi;
|
|
908
|
+
|
|
909
|
+
return Objectify(TypeRightTranslationsSemigroupElements(R),
|
|
910
|
+
[group_func, t]);
|
|
911
|
+
end);
|
|
912
|
+
|
|
913
|
+
InstallOtherMethod(Bitranslation,
|
|
914
|
+
"for a bitranslation defined by a triple on a normal RMS",
|
|
915
|
+
[IsBitranslationsSemigroup, IsAssociativeElement, IsTransformation,
|
|
916
|
+
IsTransformation],
|
|
917
|
+
function(H, g, chi, psi)
|
|
918
|
+
local S, P, I, J, i, mu;
|
|
919
|
+
|
|
920
|
+
S := UnderlyingSemigroup(H);
|
|
921
|
+
|
|
922
|
+
if not SEMIGROUPS.IsNormalRMSOverGroup(S) then
|
|
923
|
+
TryNextMethod();
|
|
924
|
+
fi;
|
|
925
|
+
|
|
926
|
+
P := Matrix(S);
|
|
927
|
+
I := Rows(S);
|
|
928
|
+
J := Columns(S);
|
|
929
|
+
|
|
930
|
+
if not g in UnderlyingSemigroup(S) then
|
|
931
|
+
ErrorNoReturn("the second argument must be an element of the group that ",
|
|
932
|
+
"the underlying semigroup of the first argument is defined ",
|
|
933
|
+
"over");
|
|
934
|
+
elif LargestImageOfMovedPoint(chi) > Length(I) then
|
|
935
|
+
ErrorNoReturn("the third argument must be a transformation on the rows of ",
|
|
936
|
+
"the underlying semigroup of the first argument");
|
|
937
|
+
elif LargestImageOfMovedPoint(psi) > Length(J) then
|
|
938
|
+
ErrorNoReturn("the fourth argument must be a transformation on the rows ",
|
|
939
|
+
"of the underlying semigroup of the first argument");
|
|
940
|
+
fi;
|
|
941
|
+
|
|
942
|
+
for i in I do
|
|
943
|
+
for mu in J do
|
|
944
|
+
if not P[mu][i ^ chi] * g * P[1 ^ psi][i]
|
|
945
|
+
= P[mu][1 ^ chi] * g * P[mu ^ psi][i] then
|
|
946
|
+
ErrorNoReturn("the arguments given do not define a bitranslation");
|
|
947
|
+
fi;
|
|
948
|
+
od;
|
|
949
|
+
od;
|
|
950
|
+
|
|
951
|
+
return _BitranslationOfNormalRMSByTripleNC(H, [g, chi, psi]);
|
|
952
|
+
end);
|
|
953
|
+
|
|
954
|
+
InstallGlobalFunction(_BitranslationOfNormalRMSByTripleNC,
|
|
955
|
+
function(H, triple)
|
|
956
|
+
local S, P, I, M, left_group_func, right_group_func, l, r;
|
|
957
|
+
|
|
958
|
+
S := UnderlyingSemigroup(H);
|
|
959
|
+
P := Matrix(S);
|
|
960
|
+
I := Rows(S);
|
|
961
|
+
M := Columns(S);
|
|
962
|
+
|
|
963
|
+
left_group_func := List(I, i -> triple[1] * P[1 ^ triple[3]][i]);
|
|
964
|
+
right_group_func := List(M, mu -> P[mu][1 ^ triple[2]] * triple[1]);
|
|
965
|
+
|
|
966
|
+
l := LeftTranslationNC(LeftTranslations(S), left_group_func, triple[2]);
|
|
967
|
+
r := RightTranslationNC(RightTranslations(S), right_group_func, triple[3]);
|
|
968
|
+
|
|
969
|
+
return BitranslationNC(H, l, r);
|
|
970
|
+
end);
|
|
971
|
+
|
|
972
|
+
############################################################################
|
|
973
|
+
# 3. Technical Methods
|
|
974
|
+
############################################################################
|
|
975
|
+
|
|
976
|
+
InstallMethod(Representative,
|
|
977
|
+
"for a semigroup of left or right translations over a normalised RMS",
|
|
978
|
+
[_IsTranslationOfNormalRMSSemigroup and IsWholeFamily],
|
|
979
|
+
function(T)
|
|
980
|
+
local e, G, S;
|
|
981
|
+
|
|
982
|
+
S := UnderlyingSemigroup(T);
|
|
983
|
+
G := UnderlyingSemigroup(S);
|
|
984
|
+
e := MultiplicativeNeutralElement(G);
|
|
985
|
+
|
|
986
|
+
if _IsLeftTranslationOfNormalRMSSemigroup(T) then
|
|
987
|
+
return LeftTranslationNC(T,
|
|
988
|
+
List(Rows(S), x -> e),
|
|
989
|
+
IdentityTransformation);
|
|
990
|
+
else
|
|
991
|
+
return RightTranslationNC(T,
|
|
992
|
+
List(Columns(S), x -> e),
|
|
993
|
+
IdentityTransformation);
|
|
994
|
+
fi;
|
|
995
|
+
end);
|
|
996
|
+
|
|
997
|
+
InstallMethod(\*, "for left translations of a normalised RMS",
|
|
998
|
+
IsIdenticalObj,
|
|
999
|
+
[_IsLeftTranslationOfNormalRMS, _IsLeftTranslationOfNormalRMS],
|
|
1000
|
+
function(x, y)
|
|
1001
|
+
return Objectify(FamilyObj(x)!.type,
|
|
1002
|
+
[List([1 .. Size(x![1])], i -> x![1][i ^ y![2]] * y![1][i]),
|
|
1003
|
+
y![2] * x![2]]);
|
|
1004
|
+
end);
|
|
1005
|
+
|
|
1006
|
+
InstallMethod(\=, "for left translations of a normalised RMS",
|
|
1007
|
+
IsIdenticalObj,
|
|
1008
|
+
[_IsLeftTranslationOfNormalRMS, _IsLeftTranslationOfNormalRMS],
|
|
1009
|
+
{x, y} -> x![1] = y![1] and x![2] = y![2]);
|
|
1010
|
+
|
|
1011
|
+
InstallMethod(\<, "for left translations of a normalised RMS",
|
|
1012
|
+
IsIdenticalObj,
|
|
1013
|
+
[_IsLeftTranslationOfNormalRMS, _IsLeftTranslationOfNormalRMS],
|
|
1014
|
+
{x, y} -> x![2] < y![2] or (x![2] = y![2] and x![1] < y![1]));
|
|
1015
|
+
|
|
1016
|
+
InstallMethod(\*, "for right translations of a normalised RMS",
|
|
1017
|
+
IsIdenticalObj,
|
|
1018
|
+
[_IsRightTranslationOfNormalRMS, _IsRightTranslationOfNormalRMS],
|
|
1019
|
+
function(x, y)
|
|
1020
|
+
return Objectify(FamilyObj(x)!.type,
|
|
1021
|
+
[List([1 .. Size(x![1])], j -> x![1][j] * y![1][j ^ x![2]]),
|
|
1022
|
+
x![2] * y![2]]);
|
|
1023
|
+
end);
|
|
1024
|
+
|
|
1025
|
+
InstallMethod(\=, "for right translations of a normalised RMS",
|
|
1026
|
+
IsIdenticalObj,
|
|
1027
|
+
[_IsRightTranslationOfNormalRMS, _IsRightTranslationOfNormalRMS],
|
|
1028
|
+
{x, y} -> x![1] = y![1] and x![2] = y![2]);
|
|
1029
|
+
|
|
1030
|
+
InstallMethod(\<, "for right translations of a normalised RMS",
|
|
1031
|
+
IsIdenticalObj,
|
|
1032
|
+
[_IsRightTranslationOfNormalRMS, _IsRightTranslationOfNormalRMS],
|
|
1033
|
+
{x, y} -> x![2] < y![2] or (x![2] = y![2] and x![1] < y![1]));
|
|
1034
|
+
|
|
1035
|
+
InstallMethod(\*, "for bitranslations of a normalised RMS",
|
|
1036
|
+
IsIdenticalObj,
|
|
1037
|
+
[_IsBitranslationOfNormalRMS, _IsBitranslationOfNormalRMS],
|
|
1038
|
+
{x, y} -> Objectify(FamilyObj(x)!.type, [x![1] * y![1], x![2] * y![2]]));
|
|
1039
|
+
|
|
1040
|
+
InstallMethod(\=, "for bitranslations of a normalised RMS",
|
|
1041
|
+
IsIdenticalObj,
|
|
1042
|
+
[_IsBitranslationOfNormalRMS, _IsBitranslationOfNormalRMS],
|
|
1043
|
+
{x, y} -> x![1] = y![1] and x![2] = y![2]);
|
|
1044
|
+
|
|
1045
|
+
InstallMethod(\<, "for bitranslations of a normalised RMS",
|
|
1046
|
+
IsIdenticalObj,
|
|
1047
|
+
[_IsBitranslationOfNormalRMS, _IsBitranslationOfNormalRMS],
|
|
1048
|
+
{x, y} -> x![1] < y![1] or (x![1] = y![1] and x![2] < y![2]));
|
|
1049
|
+
|
|
1050
|
+
InstallMethod(\^, "for a semigroup element and a translation",
|
|
1051
|
+
[IsReesMatrixSemigroupElement, _IsTranslationOfNormalRMS],
|
|
1052
|
+
function(x, t)
|
|
1053
|
+
if _IsLeftTranslationOfNormalRMS(t) then
|
|
1054
|
+
return RMSElementNC(ReesMatrixSemigroupOfFamily(FamilyObj(x)),
|
|
1055
|
+
x![1] ^ t![2],
|
|
1056
|
+
t![1][x![1]] * x![2],
|
|
1057
|
+
x![3]);
|
|
1058
|
+
else
|
|
1059
|
+
return RMSElementNC(ReesMatrixSemigroupOfFamily(FamilyObj(x)),
|
|
1060
|
+
x![1],
|
|
1061
|
+
x![2] * t![1][x![3]],
|
|
1062
|
+
x![3] ^ t![2]);
|
|
1063
|
+
fi;
|
|
1064
|
+
end);
|
|
1065
|
+
|
|
1066
|
+
InstallMethod(ChooseHashFunction, "for a left or right translation and int",
|
|
1067
|
+
[_IsTranslationOfNormalRMS, IsInt],
|
|
1068
|
+
function(_, hashlen)
|
|
1069
|
+
return rec(func := SEMIGROUPS.HashFunctionForRMSTranslations,
|
|
1070
|
+
data := hashlen);
|
|
1071
|
+
end);
|
|
1072
|
+
|
|
1073
|
+
InstallMethod(ChooseHashFunction, "for a bitranslation and int",
|
|
1074
|
+
[_IsBitranslationOfNormalRMS, IsInt],
|
|
1075
|
+
function(_, hashlen)
|
|
1076
|
+
return rec(func := SEMIGROUPS.HashFunctionForRMSBitranslations,
|
|
1077
|
+
data := hashlen);
|
|
1078
|
+
end);
|