passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-gap-pkg-semigroups might be problematic. Click here for more details.
- gap/pkg/semigroups/CHANGELOG.md +1699 -0
- gap/pkg/semigroups/CONTRIBUTING.md +91 -0
- gap/pkg/semigroups/GNUmakefile +110 -0
- gap/pkg/semigroups/GNUmakefile.in +110 -0
- gap/pkg/semigroups/GPL +674 -0
- gap/pkg/semigroups/LICENSE +16 -0
- gap/pkg/semigroups/Makefile +26 -0
- gap/pkg/semigroups/Makefile.gappkg +225 -0
- gap/pkg/semigroups/PackageInfo.g +529 -0
- gap/pkg/semigroups/README.md +102 -0
- gap/pkg/semigroups/VERSIONS +112 -0
- gap/pkg/semigroups/aclocal.m4 +375 -0
- gap/pkg/semigroups/autogen.sh +25 -0
- gap/pkg/semigroups/bin/aarch64-unknown-linux-gnu-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1016 -0
- gap/pkg/semigroups/config.status +1132 -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-8ea3c4e7.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,1094 @@
|
|
|
1
|
+
###########################################################################
|
|
2
|
+
##
|
|
3
|
+
## main/setup.gi
|
|
4
|
+
## Copyright (C) 2013-2022 James D. Mitchell
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
###############################################################################
|
|
12
|
+
# Setup - install the basic things required for specific acting semigroups #
|
|
13
|
+
###############################################################################
|
|
14
|
+
|
|
15
|
+
# IsGeneratorsOfActingSemigroup
|
|
16
|
+
|
|
17
|
+
InstallMethod(IsGeneratorsOfActingSemigroup, "for a list or collection",
|
|
18
|
+
[IsListOrCollection], ReturnFalse);
|
|
19
|
+
|
|
20
|
+
# In the below can't do ReturnTrue, since GAP insists that we use
|
|
21
|
+
# InstallTrueMethod.
|
|
22
|
+
#
|
|
23
|
+
# InstallTrueMethod(IsGeneratorsOfActingSemigroup, IsTransformationCollection);
|
|
24
|
+
#
|
|
25
|
+
# can't do InstallTrueMethod for the above since this is not picked up
|
|
26
|
+
# if Semigroups is loaded after any transformation semigroup has been created.
|
|
27
|
+
# It seems that since IsTransformationCollection has had its implied filters
|
|
28
|
+
# installed, if we add an additional implied filter
|
|
29
|
+
# IsGeneratorsOfActingSemigroup, then this is ignored. I think this is a bug.
|
|
30
|
+
|
|
31
|
+
InstallMethod(IsGeneratorsOfActingSemigroup, "for a transformation collection",
|
|
32
|
+
[IsTransformationCollection], x -> true); # gaplint: disable=W036
|
|
33
|
+
|
|
34
|
+
InstallMethod(IsGeneratorsOfActingSemigroup, "for a partial perm collection",
|
|
35
|
+
[IsPartialPermCollection], x -> true); # gaplint: disable=W036
|
|
36
|
+
|
|
37
|
+
InstallMethod(IsGeneratorsOfActingSemigroup, "for a bipartition collection",
|
|
38
|
+
[IsBipartitionCollection], x -> true); # gaplint: disable=W036
|
|
39
|
+
|
|
40
|
+
InstallMethod(IsGeneratorsOfActingSemigroup,
|
|
41
|
+
"for a Rees 0-matrix semigroup element collection",
|
|
42
|
+
[IsReesZeroMatrixSemigroupElementCollection],
|
|
43
|
+
function(coll)
|
|
44
|
+
local R;
|
|
45
|
+
R := ReesMatrixSemigroupOfFamily(FamilyObj(Representative(coll)));
|
|
46
|
+
return IsPermGroup(UnderlyingSemigroup(R)) and IsRegularSemigroup(R);
|
|
47
|
+
end);
|
|
48
|
+
|
|
49
|
+
InstallMethod(IsGeneratorsOfActingSemigroup,
|
|
50
|
+
"for a McAlister triple element collection",
|
|
51
|
+
[IsMcAlisterTripleSemigroupElementCollection],
|
|
52
|
+
function(coll)
|
|
53
|
+
return
|
|
54
|
+
IsPermGroup(McAlisterTripleSemigroupGroup(MTSEParent(Representative(coll))));
|
|
55
|
+
end);
|
|
56
|
+
|
|
57
|
+
InstallMethod(IsGeneratorsOfActingSemigroup,
|
|
58
|
+
"for an ffe coll coll coll",
|
|
59
|
+
# TODO(MatrixObj-later) is this the best way to recognise a collection of
|
|
60
|
+
# MatrixObj?
|
|
61
|
+
[IsFFECollCollColl],
|
|
62
|
+
function(coll)
|
|
63
|
+
return IsGeneratorsOfSemigroup(coll)
|
|
64
|
+
and (IsEmpty(coll) or ForAll(coll, IsMatrixObjOverFiniteField));
|
|
65
|
+
end);
|
|
66
|
+
|
|
67
|
+
InstallTrueMethod(IsGeneratorsOfActingSemigroup,
|
|
68
|
+
IsMatrixOverFiniteFieldSemigroup);
|
|
69
|
+
|
|
70
|
+
# the largest point involved in the action
|
|
71
|
+
|
|
72
|
+
InstallMethod(ActionDegree, "for a transformation",
|
|
73
|
+
[IsTransformation], DegreeOfTransformation);
|
|
74
|
+
|
|
75
|
+
InstallMethod(ActionDegree, "for a partial perm",
|
|
76
|
+
[IsPartialPerm], x -> Maximum(DegreeOfPartialPerm(x),
|
|
77
|
+
CodegreeOfPartialPerm(x)));
|
|
78
|
+
|
|
79
|
+
InstallMethod(ActionDegree, "for a bipartition",
|
|
80
|
+
[IsBipartition], DegreeOfBipartition);
|
|
81
|
+
|
|
82
|
+
InstallMethod(ActionDegree, "for a Rees 0-matrix semigroup element",
|
|
83
|
+
[IsReesZeroMatrixSemigroupElement],
|
|
84
|
+
function(x)
|
|
85
|
+
if x![1] = 0 then
|
|
86
|
+
return 0;
|
|
87
|
+
fi;
|
|
88
|
+
return NrMovedPoints(x![2]) + 1;
|
|
89
|
+
end);
|
|
90
|
+
|
|
91
|
+
InstallMethod(ActionDegree, "for a McAlister semigroup element",
|
|
92
|
+
[IsMcAlisterTripleSemigroupElement],
|
|
93
|
+
x -> 0);
|
|
94
|
+
|
|
95
|
+
InstallMethod(ActionDegree, "for a matrix obj", [IsMatrixObj],
|
|
96
|
+
function(m)
|
|
97
|
+
if not IsMatrixObjOverFiniteField(m) then
|
|
98
|
+
TryNextMethod();
|
|
99
|
+
fi;
|
|
100
|
+
return NrRows(m);
|
|
101
|
+
end);
|
|
102
|
+
|
|
103
|
+
InstallMethod(ActionDegree, "for a transformation collection",
|
|
104
|
+
[IsTransformationCollection], DegreeOfTransformationCollection);
|
|
105
|
+
|
|
106
|
+
InstallMethod(ActionDegree, "for a partial perm collection",
|
|
107
|
+
[IsPartialPermCollection], x -> Maximum(DegreeOfPartialPermCollection(x),
|
|
108
|
+
CodegreeOfPartialPermCollection(x)));
|
|
109
|
+
|
|
110
|
+
InstallMethod(ActionDegree, "for a bipartition collection",
|
|
111
|
+
[IsBipartitionCollection], DegreeOfBipartitionCollection);
|
|
112
|
+
|
|
113
|
+
InstallMethod(ActionDegree, "for a Rees 0-matrix semigroup element collection",
|
|
114
|
+
[IsReesZeroMatrixSemigroupElementCollection],
|
|
115
|
+
function(coll)
|
|
116
|
+
local R;
|
|
117
|
+
if ForAny(coll, x -> x![1] <> 0) then
|
|
118
|
+
R := ReesMatrixSemigroupOfFamily(FamilyObj(Representative(coll)));
|
|
119
|
+
return NrMovedPoints(UnderlyingSemigroup(R)) + 1;
|
|
120
|
+
fi;
|
|
121
|
+
return 0;
|
|
122
|
+
end);
|
|
123
|
+
|
|
124
|
+
InstallMethod(ActionDegree, "for a ffe coll coll coll",
|
|
125
|
+
[IsFFECollCollColl],
|
|
126
|
+
function(coll)
|
|
127
|
+
Assert(1, ForAll(coll, IsMatrixObjOverFiniteField));
|
|
128
|
+
return NrRows(Representative(coll));
|
|
129
|
+
end);
|
|
130
|
+
|
|
131
|
+
InstallMethod(ActionDegree, "for a McAlister semigroup element collection",
|
|
132
|
+
[IsMcAlisterTripleSemigroupElementCollection],
|
|
133
|
+
coll -> MaximumList(List(coll, ActionDegree)));
|
|
134
|
+
|
|
135
|
+
InstallMethod(ActionDegree, "for a transformation semigroup",
|
|
136
|
+
[IsTransformationSemigroup], DegreeOfTransformationSemigroup);
|
|
137
|
+
|
|
138
|
+
InstallMethod(ActionDegree, "for a partial perm semigroup",
|
|
139
|
+
[IsPartialPermSemigroup], x -> Maximum(DegreeOfPartialPermSemigroup(x),
|
|
140
|
+
CodegreeOfPartialPermSemigroup(x)));
|
|
141
|
+
|
|
142
|
+
InstallMethod(ActionDegree, "for a partial perm inverse semigroup",
|
|
143
|
+
[IsPartialPermSemigroup and IsInverseSemigroup], DegreeOfPartialPermSemigroup);
|
|
144
|
+
|
|
145
|
+
InstallMethod(ActionDegree, "for a bipartition semigroup",
|
|
146
|
+
[IsBipartitionSemigroup], DegreeOfBipartitionSemigroup);
|
|
147
|
+
|
|
148
|
+
InstallMethod(ActionDegree, "for a Rees 0-matrix subsemigroup with generators",
|
|
149
|
+
[IsReesZeroMatrixSubsemigroup and HasGeneratorsOfSemigroup],
|
|
150
|
+
function(R)
|
|
151
|
+
local parent;
|
|
152
|
+
if ForAny(GeneratorsOfSemigroup(R), x -> x![1] <> 0) then
|
|
153
|
+
parent := ReesMatrixSemigroupOfFamily(ElementsFamily(FamilyObj(R)));
|
|
154
|
+
return NrMovedPoints(UnderlyingSemigroup(parent)) + 1;
|
|
155
|
+
fi;
|
|
156
|
+
return 0;
|
|
157
|
+
end);
|
|
158
|
+
|
|
159
|
+
InstallMethod(ActionDegree, "for a McAlister triple subsemigroup",
|
|
160
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
161
|
+
S -> 0);
|
|
162
|
+
|
|
163
|
+
InstallMethod(ActionDegree, "for a matrix over finite field semigroup",
|
|
164
|
+
[IsMatrixOverFiniteFieldSemigroup],
|
|
165
|
+
S -> ActionDegree(Representative(S)));
|
|
166
|
+
|
|
167
|
+
# the number of points in the range of the action
|
|
168
|
+
|
|
169
|
+
InstallMethod(ActionRank, "for a transformation and integer",
|
|
170
|
+
[IsTransformation, IsInt], RANK_TRANS_INT);
|
|
171
|
+
|
|
172
|
+
InstallMethod(ActionRank, "for a transformation semigroup",
|
|
173
|
+
[IsTransformationSemigroup],
|
|
174
|
+
S -> f -> RANK_TRANS_INT(f, DegreeOfTransformationSemigroup(S)));
|
|
175
|
+
|
|
176
|
+
InstallMethod(ActionRank, "for a partial perm and integer",
|
|
177
|
+
[IsPartialPerm, IsInt],
|
|
178
|
+
{f, n} -> RankOfPartialPerm(f));
|
|
179
|
+
|
|
180
|
+
InstallMethod(ActionRank, "for a partial perm semigroup",
|
|
181
|
+
[IsPartialPermSemigroup],
|
|
182
|
+
S -> RankOfPartialPerm);
|
|
183
|
+
|
|
184
|
+
InstallMethod(ActionRank, "for a bipartition and integer",
|
|
185
|
+
[IsBipartition, IsInt], BIPART_RANK);
|
|
186
|
+
|
|
187
|
+
InstallMethod(ActionRank, "for a bipartition semigroup",
|
|
188
|
+
[IsBipartitionSemigroup],
|
|
189
|
+
S -> RankOfBipartition);
|
|
190
|
+
|
|
191
|
+
InstallMethod(ActionRank,
|
|
192
|
+
"for a Rees 0-matrix semigroup element and integer",
|
|
193
|
+
[IsReesZeroMatrixSemigroupElement, IsInt],
|
|
194
|
+
function(f, _)
|
|
195
|
+
local parent;
|
|
196
|
+
if f![1] = 0 then
|
|
197
|
+
return 0;
|
|
198
|
+
fi;
|
|
199
|
+
parent := ReesMatrixSemigroupOfFamily(FamilyObj(f));
|
|
200
|
+
return NrMovedPoints(UnderlyingSemigroup(parent)) + 1;
|
|
201
|
+
end);
|
|
202
|
+
|
|
203
|
+
InstallMethod(ActionRank, "for a Rees 0-matrix subsemigroup",
|
|
204
|
+
[IsReesZeroMatrixSubsemigroup],
|
|
205
|
+
function(R)
|
|
206
|
+
return function(x)
|
|
207
|
+
local parent;
|
|
208
|
+
if x![1] = 0 then
|
|
209
|
+
return 0;
|
|
210
|
+
else
|
|
211
|
+
parent := ReesMatrixSemigroupOfFamily(ElementsFamily(FamilyObj(R)));
|
|
212
|
+
return NrMovedPoints(UnderlyingSemigroup(parent)) + 1;
|
|
213
|
+
fi;
|
|
214
|
+
end;
|
|
215
|
+
end);
|
|
216
|
+
|
|
217
|
+
InstallMethod(ActionRank, "for a McAlister triple semigroup element and int",
|
|
218
|
+
[IsMcAlisterTripleSemigroupElement, IsInt],
|
|
219
|
+
{f, n} -> f[1]);
|
|
220
|
+
|
|
221
|
+
InstallMethod(ActionRank, "for a McAlister triple subsemigroup",
|
|
222
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
223
|
+
S -> x -> ActionDegree(S));
|
|
224
|
+
|
|
225
|
+
InstallMethod(ActionRank, "for a matrix object and integer",
|
|
226
|
+
[IsMatrixObj, IsInt],
|
|
227
|
+
function(x, _)
|
|
228
|
+
if not IsMatrixObjOverFiniteField(x) then
|
|
229
|
+
TryNextMethod();
|
|
230
|
+
fi;
|
|
231
|
+
return Rank(RowSpaceBasis(x));
|
|
232
|
+
end);
|
|
233
|
+
|
|
234
|
+
InstallMethod(ActionRank, "for a matrix semigroup",
|
|
235
|
+
[IsMatrixOverFiniteFieldSemigroup],
|
|
236
|
+
S -> x -> Rank(RowSpaceBasis(x)));
|
|
237
|
+
|
|
238
|
+
# the minimum possible rank of an element
|
|
239
|
+
|
|
240
|
+
InstallMethod(MinActionRank, "for a transformation semigroup",
|
|
241
|
+
[IsTransformationSemigroup], x -> 1);
|
|
242
|
+
|
|
243
|
+
InstallMethod(MinActionRank, "for a partial perm semigroup",
|
|
244
|
+
[IsPartialPermSemigroup], x -> 0);
|
|
245
|
+
|
|
246
|
+
InstallMethod(MinActionRank, "for a bipartition semigroup",
|
|
247
|
+
[IsBipartitionSemigroup], x -> 0);
|
|
248
|
+
|
|
249
|
+
InstallMethod(MinActionRank, "for a Rees 0-matrix subsemigroup",
|
|
250
|
+
[IsReesZeroMatrixSubsemigroup], x -> 0);
|
|
251
|
+
|
|
252
|
+
InstallMethod(MinActionRank, "for a McAlister triple subsemigroup",
|
|
253
|
+
[IsMcAlisterTripleSubsemigroup], x -> 1);
|
|
254
|
+
|
|
255
|
+
InstallMethod(MinActionRank, "for a matrix semigroup",
|
|
256
|
+
[IsMatrixOverFiniteFieldSemigroup], x -> 0);
|
|
257
|
+
|
|
258
|
+
# options passed to LambdaOrb(S) when it is created
|
|
259
|
+
|
|
260
|
+
InstallMethod(LambdaOrbOpts, "for a transformation semigroup",
|
|
261
|
+
[IsTransformationSemigroup], S -> rec(forflatplainlists := true));
|
|
262
|
+
|
|
263
|
+
InstallMethod(LambdaOrbOpts, "for a partial perm semigroup",
|
|
264
|
+
[IsPartialPermSemigroup], S -> rec(forflatplainlists := true));
|
|
265
|
+
|
|
266
|
+
InstallMethod(LambdaOrbOpts, "for a bipartition semigroup",
|
|
267
|
+
[IsBipartitionSemigroup], S -> rec());
|
|
268
|
+
|
|
269
|
+
InstallMethod(LambdaOrbOpts, "for a Rees 0-matrix subsemigroup",
|
|
270
|
+
[IsReesZeroMatrixSubsemigroup], S -> rec());
|
|
271
|
+
|
|
272
|
+
InstallMethod(LambdaOrbOpts, "for a McAlister triple subsemigroup",
|
|
273
|
+
[IsMcAlisterTripleSubsemigroup], S -> rec());
|
|
274
|
+
|
|
275
|
+
InstallMethod(LambdaOrbOpts, "for a matrix semigroup",
|
|
276
|
+
[IsMatrixOverFiniteFieldSemigroup], S -> rec());
|
|
277
|
+
|
|
278
|
+
InstallMethod(RhoOrbOpts, "for a transformation semigroup",
|
|
279
|
+
[IsTransformationSemigroup], S -> rec(forflatplainlists := true));
|
|
280
|
+
|
|
281
|
+
InstallMethod(RhoOrbOpts, "for a partial perm semigroup",
|
|
282
|
+
[IsPartialPermSemigroup], S -> rec(forflatplainlists := true));
|
|
283
|
+
|
|
284
|
+
InstallMethod(RhoOrbOpts, "for a bipartition semigroup",
|
|
285
|
+
[IsBipartitionSemigroup], S -> rec());
|
|
286
|
+
|
|
287
|
+
InstallMethod(RhoOrbOpts, "for a Rees 0-matrix subsemigroup",
|
|
288
|
+
[IsReesZeroMatrixSubsemigroup], S -> rec());
|
|
289
|
+
|
|
290
|
+
InstallMethod(RhoOrbOpts, "for a McAlister triple subsemigroup",
|
|
291
|
+
[IsMcAlisterTripleSubsemigroup], S -> rec());
|
|
292
|
+
|
|
293
|
+
InstallMethod(RhoOrbOpts, "for a matrix semigroup",
|
|
294
|
+
[IsMatrixOverFiniteFieldSemigroup], S -> rec());
|
|
295
|
+
|
|
296
|
+
# the lambda and rho acts
|
|
297
|
+
InstallMethod(LambdaAct, "for a transformation semigroup",
|
|
298
|
+
[IsTransformationSemigroup],
|
|
299
|
+
S -> {set, f} -> OnPosIntSetsTrans(set, f, DegreeOfTransformationSemigroup(S)));
|
|
300
|
+
|
|
301
|
+
InstallMethod(LambdaAct, "for a partial perm semigroup",
|
|
302
|
+
[IsPartialPermSemigroup], x -> OnPosIntSetsPartialPerm);
|
|
303
|
+
|
|
304
|
+
InstallMethod(LambdaAct, "for a bipartition semigroup",
|
|
305
|
+
[IsBipartitionSemigroup], x -> BLOCKS_RIGHT_ACT);
|
|
306
|
+
|
|
307
|
+
InstallMethod(LambdaAct, "for a Rees 0-matrix subsemigroup",
|
|
308
|
+
[IsReesZeroMatrixSubsemigroup], x -> function(pt, x)
|
|
309
|
+
if x![1] = 0 or pt = 0 then
|
|
310
|
+
return 0;
|
|
311
|
+
elif pt = -1 or x![4][pt][x![1]] <> 0 then
|
|
312
|
+
return x![3];
|
|
313
|
+
else
|
|
314
|
+
return 0;
|
|
315
|
+
fi;
|
|
316
|
+
end);
|
|
317
|
+
|
|
318
|
+
InstallMethod(LambdaAct, "for a McAlister triple subsemigroup",
|
|
319
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
320
|
+
function(S)
|
|
321
|
+
local act, digraph;
|
|
322
|
+
S := MTSEParent(Representative(S));
|
|
323
|
+
act := McAlisterTripleSemigroupAction(S);
|
|
324
|
+
digraph := McAlisterTripleSemigroupPartialOrder(S);
|
|
325
|
+
return
|
|
326
|
+
function(pt, x)
|
|
327
|
+
if pt = 0 then
|
|
328
|
+
return act(x[1], x[2] ^ -1);
|
|
329
|
+
fi;
|
|
330
|
+
return PartialOrderDigraphJoinOfVertices(digraph,
|
|
331
|
+
act(pt, x[2] ^ -1),
|
|
332
|
+
act(x[1], x[2] ^ -1));
|
|
333
|
+
end;
|
|
334
|
+
end);
|
|
335
|
+
|
|
336
|
+
InstallMethod(LambdaAct, "for a matrix over finite field semigroup",
|
|
337
|
+
[IsMatrixOverFiniteFieldSemigroup],
|
|
338
|
+
S -> {vsp, mat} -> MatrixOverFiniteFieldRowSpaceRightAction(S, vsp, mat));
|
|
339
|
+
|
|
340
|
+
InstallMethod(RhoAct, "for a transformation semigroup",
|
|
341
|
+
[IsTransformationSemigroup],
|
|
342
|
+
S ->
|
|
343
|
+
{set, f} -> ON_KERNEL_ANTI_ACTION(set, f, DegreeOfTransformationSemigroup(S)));
|
|
344
|
+
|
|
345
|
+
InstallMethod(RhoAct, "for a partial perm semigroup",
|
|
346
|
+
[IsPartialPermSemigroup], S ->
|
|
347
|
+
{set, f} -> OnPosIntSetsPartialPerm(set, f ^ -1));
|
|
348
|
+
|
|
349
|
+
InstallMethod(RhoAct, "for a partial perm semigroup",
|
|
350
|
+
[IsBipartitionSemigroup], x -> BLOCKS_LEFT_ACT);
|
|
351
|
+
|
|
352
|
+
InstallMethod(RhoAct, "for a Rees 0-matrix subsemigroup",
|
|
353
|
+
[IsReesZeroMatrixSubsemigroup], x -> function(pt, x)
|
|
354
|
+
if x![1] = 0 or pt = 0 then
|
|
355
|
+
return 0;
|
|
356
|
+
elif pt = -1 or x![4][x![3]][pt] <> 0 then
|
|
357
|
+
return x![1];
|
|
358
|
+
else
|
|
359
|
+
return 0;
|
|
360
|
+
fi;
|
|
361
|
+
end);
|
|
362
|
+
|
|
363
|
+
InstallMethod(RhoAct, "for a McAlister triple subsemigroup",
|
|
364
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
365
|
+
function(S)
|
|
366
|
+
local act, digraph;
|
|
367
|
+
S := MTSEParent(Representative(S));
|
|
368
|
+
act := McAlisterTripleSemigroupAction(S);
|
|
369
|
+
digraph := McAlisterTripleSemigroupPartialOrder(S);
|
|
370
|
+
return
|
|
371
|
+
function(pt, x)
|
|
372
|
+
if pt = 0 then
|
|
373
|
+
return x[1];
|
|
374
|
+
fi;
|
|
375
|
+
return PartialOrderDigraphJoinOfVertices(digraph,
|
|
376
|
+
act(pt, x[2]),
|
|
377
|
+
x[1]);
|
|
378
|
+
end;
|
|
379
|
+
end);
|
|
380
|
+
|
|
381
|
+
InstallMethod(RhoAct, "for a matrix semigroup",
|
|
382
|
+
[IsMatrixOverFiniteFieldSemigroup],
|
|
383
|
+
S -> {vsp, mat} -> LambdaAct(S)(vsp, TransposedMat(mat)));
|
|
384
|
+
|
|
385
|
+
# the seed or dummy start point for LambdaOrb
|
|
386
|
+
|
|
387
|
+
InstallMethod(LambdaOrbSeed, "for a transformation semigroup",
|
|
388
|
+
[IsTransformationSemigroup], S -> [0]);
|
|
389
|
+
|
|
390
|
+
InstallMethod(LambdaOrbSeed, "for a partial perm semigroup",
|
|
391
|
+
[IsPartialPermSemigroup], S -> [0]);
|
|
392
|
+
|
|
393
|
+
InstallMethod(LambdaOrbSeed, "for a bipartition semigroup",
|
|
394
|
+
[IsBipartitionSemigroup],
|
|
395
|
+
S -> BLOCKS_NC([[1 .. DegreeOfBipartitionSemigroup(S) + 1]]));
|
|
396
|
+
|
|
397
|
+
InstallMethod(LambdaOrbSeed, "for a Rees 0-matrix subsemigroup",
|
|
398
|
+
[IsReesZeroMatrixSubsemigroup], S -> -1);
|
|
399
|
+
|
|
400
|
+
InstallMethod(LambdaOrbSeed, "for a McAlister triple subsemigroup",
|
|
401
|
+
[IsMcAlisterTripleSubsemigroup], S -> 0);
|
|
402
|
+
|
|
403
|
+
InstallMethod(LambdaOrbSeed,
|
|
404
|
+
"for a matrix over finite field semigroup",
|
|
405
|
+
[IsMatrixOverFiniteFieldSemigroup],
|
|
406
|
+
function(S)
|
|
407
|
+
local deg;
|
|
408
|
+
deg := NrRows(Representative(S)) + 2;
|
|
409
|
+
return NewRowBasisOverFiniteField(IsPlistRowBasisOverFiniteFieldRep,
|
|
410
|
+
BaseDomain(S),
|
|
411
|
+
NullMat(deg, deg, BaseDomain(S)));
|
|
412
|
+
end);
|
|
413
|
+
|
|
414
|
+
# the seed or dummy start point for RhoOrb
|
|
415
|
+
|
|
416
|
+
InstallMethod(RhoOrbSeed, "for a transformation semigroup",
|
|
417
|
+
[IsTransformationSemigroup], S -> [0]);
|
|
418
|
+
|
|
419
|
+
InstallMethod(RhoOrbSeed, "for a partial perm semigroup",
|
|
420
|
+
[IsPartialPermSemigroup], S -> [0]);
|
|
421
|
+
|
|
422
|
+
InstallMethod(RhoOrbSeed, "for a bipartition semigroup",
|
|
423
|
+
[IsBipartitionSemigroup],
|
|
424
|
+
S -> BLOCKS_NC([[1 .. DegreeOfBipartitionSemigroup(S) + 1]]));
|
|
425
|
+
|
|
426
|
+
InstallMethod(RhoOrbSeed, "for a Rees 0-matrix subsemigroup",
|
|
427
|
+
[IsReesZeroMatrixSubsemigroup], S -> -1);
|
|
428
|
+
|
|
429
|
+
InstallMethod(RhoOrbSeed, "for a McAlister triple subsemigroup",
|
|
430
|
+
[IsMcAlisterTripleSubsemigroup], S -> 0);
|
|
431
|
+
|
|
432
|
+
InstallMethod(RhoOrbSeed, "for a matrix semigroup",
|
|
433
|
+
[IsMatrixOverFiniteFieldSemigroup], LambdaOrbSeed);
|
|
434
|
+
|
|
435
|
+
# the function calculating the lambda or rho value of an element
|
|
436
|
+
|
|
437
|
+
InstallMethod(LambdaFunc, "for a transformation semigroup",
|
|
438
|
+
[IsTransformationSemigroup],
|
|
439
|
+
S -> f -> IMAGE_SET_TRANS_INT(f, DegreeOfTransformationSemigroup(S)));
|
|
440
|
+
|
|
441
|
+
InstallMethod(LambdaFunc, "for a partial perm semigroup",
|
|
442
|
+
[IsPartialPermSemigroup], x -> IMAGE_SET_PPERM);
|
|
443
|
+
|
|
444
|
+
InstallMethod(LambdaFunc, "for a bipartition semigroup",
|
|
445
|
+
[IsBipartitionSemigroup], x -> BIPART_RIGHT_BLOCKS);
|
|
446
|
+
|
|
447
|
+
InstallMethod(LambdaFunc, "for a Rees 0-matrix subsemigroup",
|
|
448
|
+
[IsReesZeroMatrixSubsemigroup], R -> function(x)
|
|
449
|
+
if x![1] <> 0 then
|
|
450
|
+
return x![3];
|
|
451
|
+
fi;
|
|
452
|
+
return 0;
|
|
453
|
+
end);
|
|
454
|
+
|
|
455
|
+
InstallMethod(LambdaFunc, "for a McAlister triple subsemigroup",
|
|
456
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
457
|
+
function(S)
|
|
458
|
+
local act;
|
|
459
|
+
act := McAlisterTripleSemigroupAction(MTSEParent(Representative(S)));
|
|
460
|
+
return x -> act(x[1], x[2] ^ -1);
|
|
461
|
+
end);
|
|
462
|
+
|
|
463
|
+
# a function that returns the row space
|
|
464
|
+
InstallMethod(LambdaFunc, "for a matrix semigroup",
|
|
465
|
+
[IsMatrixOverFiniteFieldSemigroup], S -> RowSpaceBasis);
|
|
466
|
+
|
|
467
|
+
InstallMethod(RhoFunc, "for a transformation semigroup",
|
|
468
|
+
[IsTransformationSemigroup],
|
|
469
|
+
S -> f -> FLAT_KERNEL_TRANS_INT(f, DegreeOfTransformationSemigroup(S)));
|
|
470
|
+
|
|
471
|
+
InstallMethod(RhoFunc, "for a partial perm semigroup",
|
|
472
|
+
[IsPartialPermSemigroup], x -> DOMAIN_PPERM);
|
|
473
|
+
|
|
474
|
+
InstallMethod(RhoFunc, "for a bipartition semigroup",
|
|
475
|
+
[IsBipartitionSemigroup], x -> BIPART_LEFT_BLOCKS);
|
|
476
|
+
|
|
477
|
+
InstallMethod(RhoFunc, "for a Rees 0-matrix subsemigroup",
|
|
478
|
+
[IsReesZeroMatrixSubsemigroup], R -> x -> x![1]);
|
|
479
|
+
|
|
480
|
+
InstallMethod(RhoFunc, "for a McAlister triple subsemigroup",
|
|
481
|
+
[IsMcAlisterTripleSubsemigroup], S -> x -> x[1]);
|
|
482
|
+
|
|
483
|
+
# a function that returns the column space
|
|
484
|
+
InstallMethod(RhoFunc, "for a matrix semigroup",
|
|
485
|
+
[IsMatrixOverFiniteFieldSemigroup],
|
|
486
|
+
S -> mat -> LambdaFunc(S)(TransposedMat(mat)));
|
|
487
|
+
|
|
488
|
+
# The function used to calculate the rank of lambda or rho value
|
|
489
|
+
|
|
490
|
+
InstallMethod(LambdaRank, "for a transformation semigroup",
|
|
491
|
+
[IsTransformationSemigroup], x -> Length);
|
|
492
|
+
|
|
493
|
+
InstallMethod(LambdaRank, "for a partial perm semigroup",
|
|
494
|
+
[IsPartialPermSemigroup], x -> Length);
|
|
495
|
+
|
|
496
|
+
InstallMethod(LambdaRank, "for a bipartition semigroup",
|
|
497
|
+
[IsBipartitionSemigroup], x -> BLOCKS_RANK);
|
|
498
|
+
|
|
499
|
+
InstallMethod(LambdaRank, "for a Rees 0-matrix subsemigroup",
|
|
500
|
+
[IsReesZeroMatrixSubsemigroup], R ->
|
|
501
|
+
function(x)
|
|
502
|
+
local parent;
|
|
503
|
+
if x = 0 then
|
|
504
|
+
return 0;
|
|
505
|
+
else
|
|
506
|
+
parent := ReesMatrixSemigroupOfFamily(ElementsFamily(FamilyObj(R)));
|
|
507
|
+
return NrMovedPoints(UnderlyingSemigroup(parent)) + 1;
|
|
508
|
+
fi;
|
|
509
|
+
end);
|
|
510
|
+
|
|
511
|
+
InstallMethod(LambdaRank, "for a McAlister subsemigroup",
|
|
512
|
+
[IsMcAlisterTripleSubsemigroup], S ->
|
|
513
|
+
function(x)
|
|
514
|
+
local T;
|
|
515
|
+
if x = 0 then
|
|
516
|
+
return 0;
|
|
517
|
+
fi;
|
|
518
|
+
T := MTSEParent(Representative(S));
|
|
519
|
+
return ActionRank(MTSE(T, x, One(McAlisterTripleSemigroupGroup(T))), 0);
|
|
520
|
+
end);
|
|
521
|
+
|
|
522
|
+
# Why are there row spaces and matrices passed in here?
|
|
523
|
+
InstallMethod(LambdaRank, "for a matrix semigroup",
|
|
524
|
+
[IsMatrixOverFiniteFieldSemigroup], x -> Rank);
|
|
525
|
+
|
|
526
|
+
InstallMethod(RhoRank, "for a transformation semigroup",
|
|
527
|
+
[IsTransformationSemigroup], S -> function(x)
|
|
528
|
+
if IsEmpty(x) then
|
|
529
|
+
return 0;
|
|
530
|
+
else
|
|
531
|
+
return MaximumList(x);
|
|
532
|
+
fi;
|
|
533
|
+
end);
|
|
534
|
+
|
|
535
|
+
InstallMethod(RhoRank, "for a partial perm semigroup",
|
|
536
|
+
[IsPartialPermSemigroup], x -> Length);
|
|
537
|
+
|
|
538
|
+
InstallMethod(RhoRank, "for a bipartition semigroup",
|
|
539
|
+
[IsBipartitionSemigroup], x -> BLOCKS_RANK);
|
|
540
|
+
|
|
541
|
+
InstallMethod(RhoRank, "for a Rees 0-matrix subsemigroup",
|
|
542
|
+
[IsReesZeroMatrixSubsemigroup], LambdaRank);
|
|
543
|
+
|
|
544
|
+
InstallMethod(RhoRank, "for a matrix semigroup",
|
|
545
|
+
[IsMatrixOverFiniteFieldSemigroup], LambdaRank);
|
|
546
|
+
|
|
547
|
+
InstallMethod(RhoRank, "for a McAlister subsemigroup",
|
|
548
|
+
[IsMcAlisterTripleSubsemigroup], LambdaRank);
|
|
549
|
+
|
|
550
|
+
# if g=LambdaInverse(X, f) and X^f=Y, then Y^g=X and g acts on the right
|
|
551
|
+
# like the inverse of f on Y.
|
|
552
|
+
|
|
553
|
+
InstallMethod(LambdaInverse, "for a transformation semigroup",
|
|
554
|
+
[IsTransformationSemigroup], S -> INV_LIST_TRANS);
|
|
555
|
+
|
|
556
|
+
InstallMethod(LambdaInverse, "for a partial perm semigroup",
|
|
557
|
+
[IsPartialPermSemigroup], S -> {x, f} -> f ^ -1);
|
|
558
|
+
|
|
559
|
+
InstallMethod(LambdaInverse, "for a McAlister triple subsemigroup",
|
|
560
|
+
[IsMcAlisterTripleSubsemigroup], S -> {x, f} -> f ^ -1);
|
|
561
|
+
|
|
562
|
+
InstallMethod(LambdaInverse, "for a bipartition semigroup",
|
|
563
|
+
[IsBipartitionSemigroup], S -> BLOCKS_INV_RIGHT);
|
|
564
|
+
|
|
565
|
+
InstallMethod(LambdaInverse, "for a Rees 0-matrix subsemigroup",
|
|
566
|
+
[IsReesZeroMatrixSubsemigroup], S ->
|
|
567
|
+
function(k, x)
|
|
568
|
+
local i;
|
|
569
|
+
if x![1] = 0 or k = 0 then
|
|
570
|
+
return x;
|
|
571
|
+
fi;
|
|
572
|
+
i := First([1 .. Length(x![4][x![3]])], i -> x![4][x![3]][i] <> 0);
|
|
573
|
+
return Objectify(FamilyObj(x)!.type,
|
|
574
|
+
[i,
|
|
575
|
+
(x![4][k][x![1]] * x![2] * x![4][x![3]][i]) ^ -1,
|
|
576
|
+
k,
|
|
577
|
+
x![4]]);
|
|
578
|
+
end);
|
|
579
|
+
|
|
580
|
+
# if g = RhoInverse(X, f) and f ^ X = Y (this is a left action), then
|
|
581
|
+
# g ^ Y = X and g acts on the left like the inverse of f on Y.
|
|
582
|
+
|
|
583
|
+
InstallMethod(LambdaInverse, "for a matrix semigroup",
|
|
584
|
+
[IsMatrixOverFiniteFieldSemigroup], S ->
|
|
585
|
+
{rsp, mat} -> MatrixOverFiniteFieldLocalRightInverse(S, rsp, mat));
|
|
586
|
+
|
|
587
|
+
InstallMethod(RhoInverse, "for a transformation semigroup",
|
|
588
|
+
[IsTransformationSemigroup], S -> INV_KER_TRANS);
|
|
589
|
+
|
|
590
|
+
InstallMethod(RhoInverse, "for a partial perm semigroup",
|
|
591
|
+
[IsPartialPermSemigroup], S ->
|
|
592
|
+
{dom, f} -> f ^ -1);
|
|
593
|
+
|
|
594
|
+
InstallMethod(RhoInverse, "for a McAlister triple subsemigroup",
|
|
595
|
+
[IsMcAlisterTripleSubsemigroup], S -> {x, f} -> f ^ -1);
|
|
596
|
+
|
|
597
|
+
# JDM better method for this!!
|
|
598
|
+
|
|
599
|
+
InstallMethod(RhoInverse, "for a Rees 0-matrix subsemigroup",
|
|
600
|
+
[IsReesZeroMatrixSubsemigroup], S ->
|
|
601
|
+
function(k, x)
|
|
602
|
+
local i;
|
|
603
|
+
if x![1] = 0 or k = 0 then
|
|
604
|
+
return x;
|
|
605
|
+
fi;
|
|
606
|
+
i := First([1 .. Length(x![4])], i -> x![4][i][x![1]] <> 0);
|
|
607
|
+
return Objectify(FamilyObj(x)!.type,
|
|
608
|
+
[k,
|
|
609
|
+
(x![4][i][x![1]] * x![2] * x![4][x![3]][k]) ^ -1,
|
|
610
|
+
i,
|
|
611
|
+
x![4]]);
|
|
612
|
+
end);
|
|
613
|
+
|
|
614
|
+
InstallMethod(RhoInverse, "for a bipartition semigroup",
|
|
615
|
+
[IsBipartitionSemigroup], S -> BLOCKS_INV_LEFT);
|
|
616
|
+
|
|
617
|
+
InstallMethod(RhoInverse, "for a matrix semigroup",
|
|
618
|
+
[IsMatrixOverFiniteFieldSemigroup], S ->
|
|
619
|
+
function(rsp, mat)
|
|
620
|
+
return TransposedMat(MatrixOverFiniteFieldLocalRightInverse(S,
|
|
621
|
+
rsp, TransposedMat(mat)));
|
|
622
|
+
end);
|
|
623
|
+
|
|
624
|
+
SEMIGROUPS.DefaultLambdaBound := _ ->
|
|
625
|
+
function(r)
|
|
626
|
+
if r < 100 then
|
|
627
|
+
return Factorial(r);
|
|
628
|
+
else
|
|
629
|
+
return infinity;
|
|
630
|
+
fi;
|
|
631
|
+
end;
|
|
632
|
+
|
|
633
|
+
InstallMethod(LambdaBound, "for a transformation semigroup",
|
|
634
|
+
[IsTransformationSemigroup], SEMIGROUPS.DefaultLambdaBound);
|
|
635
|
+
|
|
636
|
+
InstallMethod(RhoBound, "for a transformation semigroup",
|
|
637
|
+
[IsTransformationSemigroup], LambdaBound);
|
|
638
|
+
|
|
639
|
+
InstallMethod(LambdaBound, "for a partial perm semigroup",
|
|
640
|
+
[IsPartialPermSemigroup], SEMIGROUPS.DefaultLambdaBound);
|
|
641
|
+
|
|
642
|
+
InstallMethod(RhoBound, "for a partial perm semigroup",
|
|
643
|
+
[IsPartialPermSemigroup], LambdaBound);
|
|
644
|
+
|
|
645
|
+
InstallMethod(LambdaBound, "for a bipartition semigroup",
|
|
646
|
+
[IsBipartitionSemigroup], SEMIGROUPS.DefaultLambdaBound);
|
|
647
|
+
|
|
648
|
+
InstallMethod(RhoBound, "for a bipartition semigroup",
|
|
649
|
+
[IsBipartitionSemigroup], LambdaBound);
|
|
650
|
+
|
|
651
|
+
InstallMethod(LambdaBound, "for a Rees 0-matrix semigroup",
|
|
652
|
+
[IsReesZeroMatrixSubsemigroup], SEMIGROUPS.DefaultLambdaBound);
|
|
653
|
+
|
|
654
|
+
InstallMethod(RhoBound, "for a Rees 0-matrix semigroup",
|
|
655
|
+
[IsReesZeroMatrixSubsemigroup], LambdaBound);
|
|
656
|
+
|
|
657
|
+
InstallMethod(LambdaBound, "for a McAlister subsemigroup",
|
|
658
|
+
[IsMcAlisterTripleSubsemigroup], S ->
|
|
659
|
+
function(r)
|
|
660
|
+
local G;
|
|
661
|
+
G := McAlisterTripleSemigroupGroup(MTSEParent(Representative(S)));
|
|
662
|
+
return Size(Stabilizer(G, r, McAlisterTripleSemigroupAction(S)));
|
|
663
|
+
end);
|
|
664
|
+
|
|
665
|
+
InstallMethod(RhoBound, "for a McAlister subsemigroup",
|
|
666
|
+
[IsMcAlisterTripleSubsemigroup], LambdaBound);
|
|
667
|
+
|
|
668
|
+
InstallMethod(LambdaBound, "for a matrix semigroup",
|
|
669
|
+
[IsMatrixOverFiniteFieldSemigroup], S ->
|
|
670
|
+
function(r)
|
|
671
|
+
if r = 0 then
|
|
672
|
+
return 1;
|
|
673
|
+
elif r < 100 then
|
|
674
|
+
return Size(GL(NrRows(Representative(S)), BaseDomain(S)));
|
|
675
|
+
else
|
|
676
|
+
return infinity;
|
|
677
|
+
fi;
|
|
678
|
+
end);
|
|
679
|
+
|
|
680
|
+
InstallMethod(RhoBound, "for a matrix semigroup",
|
|
681
|
+
[IsMatrixOverFiniteFieldSemigroup], LambdaBound);
|
|
682
|
+
|
|
683
|
+
# LamdaIdentity(S) returns a function that returns
|
|
684
|
+
# the identity element of the Schutzenberger group
|
|
685
|
+
# elements produced by LambdaPerm
|
|
686
|
+
|
|
687
|
+
# TODO(later) these functions don't need the argument <r> any more
|
|
688
|
+
|
|
689
|
+
InstallMethod(LambdaIdentity, "for a transformation semigroup",
|
|
690
|
+
[IsTransformationSemigroup],
|
|
691
|
+
S -> r -> ());
|
|
692
|
+
|
|
693
|
+
InstallMethod(RhoIdentity, "for a transformation semigroup",
|
|
694
|
+
[IsTransformationSemigroup],
|
|
695
|
+
S -> r -> ());
|
|
696
|
+
|
|
697
|
+
InstallMethod(LambdaIdentity, "for a partial perm semigroup",
|
|
698
|
+
[IsPartialPermSemigroup],
|
|
699
|
+
S -> r -> ());
|
|
700
|
+
|
|
701
|
+
InstallMethod(RhoIdentity, "for a partial perm semigroup",
|
|
702
|
+
[IsPartialPermSemigroup],
|
|
703
|
+
S -> r -> ());
|
|
704
|
+
|
|
705
|
+
InstallMethod(LambdaIdentity, "for a bipartition semigroup",
|
|
706
|
+
[IsBipartitionSemigroup],
|
|
707
|
+
S -> r -> ());
|
|
708
|
+
|
|
709
|
+
InstallMethod(RhoIdentity, "for a bipartition semigroup",
|
|
710
|
+
[IsBipartitionSemigroup],
|
|
711
|
+
S -> r -> ());
|
|
712
|
+
|
|
713
|
+
InstallMethod(LambdaIdentity, "for a Rees 0-matrix semigroup",
|
|
714
|
+
[IsReesZeroMatrixSubsemigroup],
|
|
715
|
+
S -> r -> ());
|
|
716
|
+
|
|
717
|
+
InstallMethod(RhoIdentity, "for a Rees 0-matrix semigroup",
|
|
718
|
+
[IsReesZeroMatrixSubsemigroup],
|
|
719
|
+
S -> r -> ());
|
|
720
|
+
|
|
721
|
+
InstallMethod(LambdaIdentity, "for a McAlister triple subsemigroup",
|
|
722
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
723
|
+
S -> r -> ());
|
|
724
|
+
|
|
725
|
+
InstallMethod(RhoIdentity, "for a McAlister triple subsemigroup",
|
|
726
|
+
[IsMcAlisterTripleSubsemigroup], LambdaIdentity);
|
|
727
|
+
|
|
728
|
+
InstallMethod(LambdaIdentity, "for a matrix semigroup",
|
|
729
|
+
[IsMatrixOverFiniteFieldSemigroup], S ->
|
|
730
|
+
r -> IdentityMat(r, BaseDomain(Representative(S))));
|
|
731
|
+
|
|
732
|
+
InstallMethod(RhoIdentity, "for a matrix semigroup",
|
|
733
|
+
[IsMatrixOverFiniteFieldSemigroup], S ->
|
|
734
|
+
r -> IdentityMat(r, BaseDomain(Representative(S))));
|
|
735
|
+
|
|
736
|
+
# LambdaPerm(S) returns a permutation from two acting semigroup elements with
|
|
737
|
+
# equal LambdaFunc and RhoFunc. This is required to check if one of the two
|
|
738
|
+
# elements belongs to the schutz gp of a lambda orb.
|
|
739
|
+
|
|
740
|
+
InstallMethod(LambdaPerm, "for a transformation semigroup",
|
|
741
|
+
[IsTransformationSemigroup], S -> PermLeftQuoTransformationNC);
|
|
742
|
+
|
|
743
|
+
InstallMethod(LambdaPerm, "for a partial perm semigroup",
|
|
744
|
+
[IsPartialPermSemigroup], S -> PERM_LEFT_QUO_PPERM_NC);
|
|
745
|
+
|
|
746
|
+
InstallMethod(LambdaPerm, "for a bipartition semigroup",
|
|
747
|
+
[IsBipartitionSemigroup], S -> BIPART_PERM_LEFT_QUO);
|
|
748
|
+
|
|
749
|
+
InstallMethod(LambdaPerm, "for a Rees 0-matrix subsemigroup",
|
|
750
|
+
[IsReesZeroMatrixSubsemigroup], S ->
|
|
751
|
+
function(x, y)
|
|
752
|
+
if x![1] = 0 or y![1] = 0 then
|
|
753
|
+
return ();
|
|
754
|
+
fi;
|
|
755
|
+
return x![2] ^ -1 * y![2];
|
|
756
|
+
end);
|
|
757
|
+
|
|
758
|
+
InstallMethod(LambdaPerm, "for a McAlister triple subsemigroup",
|
|
759
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
760
|
+
S -> {x, y} -> x[2] ^ -1 * y[2]);
|
|
761
|
+
|
|
762
|
+
InstallMethod(LambdaPerm, "for a matrix semigroup",
|
|
763
|
+
[IsMatrixOverFiniteFieldSemigroup], S ->
|
|
764
|
+
{x, y} -> MatrixOverFiniteFieldSchutzGrpElement(S, x, y));
|
|
765
|
+
|
|
766
|
+
# Returns a permutation mapping LambdaFunc(S)(x) to LambdaFunc(S)(y) so that
|
|
767
|
+
# yx ^ -1(i) = p(i) when RhoFunc(S)(x) = RhoFunc(S)(y)!!
|
|
768
|
+
|
|
769
|
+
InstallMethod(LambdaConjugator, "for a transformation semigroup",
|
|
770
|
+
[IsTransformationSemigroup], S -> TRANS_IMG_CONJ);
|
|
771
|
+
|
|
772
|
+
InstallMethod(LambdaConjugator, "for a partial perm semigroup",
|
|
773
|
+
[IsPartialPermSemigroup], S ->
|
|
774
|
+
{x, y} -> MappingPermListList(IMAGE_PPERM(x), IMAGE_PPERM(y)));
|
|
775
|
+
|
|
776
|
+
InstallMethod(LambdaConjugator, "for a bipartition semigroup",
|
|
777
|
+
[IsBipartitionSemigroup], S -> BIPART_LAMBDA_CONJ);
|
|
778
|
+
|
|
779
|
+
InstallMethod(LambdaConjugator, "for a Rees 0-matrix subsemigroup",
|
|
780
|
+
[IsReesZeroMatrixSubsemigroup], S ->
|
|
781
|
+
# FIXME(later) is this right???? This is not right!!
|
|
782
|
+
{x, y} -> ());
|
|
783
|
+
|
|
784
|
+
InstallMethod(LambdaConjugator, "for a McAlister triple subsemigroup",
|
|
785
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
786
|
+
function(S)
|
|
787
|
+
local T, G, act;
|
|
788
|
+
T := MTSEParent(Representative(S));
|
|
789
|
+
G := McAlisterTripleSemigroupGroup(T);
|
|
790
|
+
act := MTSUnderlyingAction(T); # MTSAction is not an action, causes problems
|
|
791
|
+
return {x, y} -> RepresentativeAction(G,
|
|
792
|
+
LambdaFunc(S)(x),
|
|
793
|
+
LambdaFunc(S)(y),
|
|
794
|
+
act);
|
|
795
|
+
end);
|
|
796
|
+
|
|
797
|
+
InstallMethod(LambdaConjugator, "for a matrix semigroup",
|
|
798
|
+
[IsMatrixOverFiniteFieldSemigroup], S ->
|
|
799
|
+
{x, y} -> MatrixOverFiniteFieldLambdaConjugator(S, x, y));
|
|
800
|
+
|
|
801
|
+
# the function used to test if there is an idempotent with the specified
|
|
802
|
+
# lambda and rho values.
|
|
803
|
+
|
|
804
|
+
InstallMethod(IdempotentTester, "for a transformation semigroup",
|
|
805
|
+
[IsTransformationSemigroup], S ->
|
|
806
|
+
function(img, ker)
|
|
807
|
+
if IsEmpty(img) then
|
|
808
|
+
return IsEmpty(ker);
|
|
809
|
+
fi;
|
|
810
|
+
return IsInjectiveListTrans(img, ker) and Length(img) = MaximumList(ker);
|
|
811
|
+
end);
|
|
812
|
+
|
|
813
|
+
InstallMethod(IdempotentTester, "for a partial perm semigroup",
|
|
814
|
+
[IsPartialPermSemigroup], S -> \=);
|
|
815
|
+
|
|
816
|
+
InstallMethod(IdempotentTester, "for a bipartition semigroup",
|
|
817
|
+
[IsBipartitionSemigroup], S -> BLOCKS_E_TESTER);
|
|
818
|
+
|
|
819
|
+
InstallMethod(IdempotentTester, "for a Rees 0-matrix subsemigroup",
|
|
820
|
+
[IsReesZeroMatrixSubsemigroup], R ->
|
|
821
|
+
function(j, i)
|
|
822
|
+
local parent;
|
|
823
|
+
if i = 0 and j = 0 then
|
|
824
|
+
return true;
|
|
825
|
+
fi;
|
|
826
|
+
parent := ReesMatrixSemigroupOfFamily(ElementsFamily(FamilyObj(R)));
|
|
827
|
+
return Matrix(parent)[j][i] <> 0;
|
|
828
|
+
end);
|
|
829
|
+
|
|
830
|
+
InstallMethod(IdempotentTester, "for a McAlister triple subsemigroup",
|
|
831
|
+
[IsMcAlisterTripleSubsemigroup], S -> {x, y} -> x = y);
|
|
832
|
+
|
|
833
|
+
InstallMethod(IdempotentTester, "for a matrix semigroup",
|
|
834
|
+
[IsMatrixOverFiniteFieldSemigroup],
|
|
835
|
+
S -> {x, y} -> MatrixOverFiniteFieldIdempotentTester(S, x, y));
|
|
836
|
+
|
|
837
|
+
# the function used to create an idempotent with the specified lambda and rho
|
|
838
|
+
# values.
|
|
839
|
+
|
|
840
|
+
InstallMethod(IdempotentCreator, "for a transformation semigroup",
|
|
841
|
+
[IsTransformationSemigroup], S -> IDEM_IMG_KER_NC);
|
|
842
|
+
|
|
843
|
+
InstallMethod(IdempotentCreator, "for a partial perm semigp",
|
|
844
|
+
[IsPartialPermSemigroup], S -> PartialPermNC);
|
|
845
|
+
|
|
846
|
+
InstallMethod(IdempotentCreator, "for a bipartition semigroup",
|
|
847
|
+
[IsBipartitionSemigroup], S -> BLOCKS_E_CREATOR);
|
|
848
|
+
|
|
849
|
+
InstallMethod(IdempotentCreator, "for a Rees 0-matrix subsemigroup",
|
|
850
|
+
[IsReesZeroMatrixSubsemigroup], R ->
|
|
851
|
+
function(j, i)
|
|
852
|
+
local mat;
|
|
853
|
+
if i = 0 and j = 0 then
|
|
854
|
+
return Objectify(TypeReesMatrixSemigroupElements(R), [0]);
|
|
855
|
+
fi;
|
|
856
|
+
mat := Matrix(ReesMatrixSemigroupOfFamily(ElementsFamily(FamilyObj(R))));
|
|
857
|
+
return Objectify(TypeReesMatrixSemigroupElements(R),
|
|
858
|
+
[i, mat[j][i] ^ -1, j, mat]);
|
|
859
|
+
end);
|
|
860
|
+
|
|
861
|
+
InstallMethod(IdempotentCreator, "for a McAlister triple subsemigroup",
|
|
862
|
+
[IsMcAlisterTripleSubsemigroup], S ->
|
|
863
|
+
function(x, _)
|
|
864
|
+
local T;
|
|
865
|
+
T := MTSEParent(Representative(S));
|
|
866
|
+
return MTSE(T, x, One(McAlisterTripleSemigroupGroup(T)));
|
|
867
|
+
end);
|
|
868
|
+
|
|
869
|
+
InstallMethod(IdempotentCreator, "for a matrix semigroup",
|
|
870
|
+
[IsMatrixOverFiniteFieldSemigroup],
|
|
871
|
+
S -> {x, y} -> MatrixOverFiniteFieldIdempotentCreator(S, x, y));
|
|
872
|
+
|
|
873
|
+
# the action of elements of the stabiliser of a lambda-value on any element of
|
|
874
|
+
# the semigroup with that lambda-value
|
|
875
|
+
|
|
876
|
+
# StabilizerAction will be \* for transformation and partial perm semigroups
|
|
877
|
+
# and something else for semigroups of bipartitions.
|
|
878
|
+
|
|
879
|
+
InstallMethod(StabilizerAction, "for a transformation semigroup",
|
|
880
|
+
[IsTransformationSemigroup], S -> OnRight);
|
|
881
|
+
|
|
882
|
+
InstallMethod(StabilizerAction, "for a partial perm semigroup",
|
|
883
|
+
[IsPartialPermSemigroup], S -> OnRight);
|
|
884
|
+
|
|
885
|
+
InstallMethod(StabilizerAction, "for a bipartition semigroup",
|
|
886
|
+
[IsBipartitionSemigroup], S -> BIPART_STAB_ACTION);
|
|
887
|
+
|
|
888
|
+
InstallMethod(StabilizerAction, "for a Rees 0-matrix subsemigroup",
|
|
889
|
+
[IsReesZeroMatrixSubsemigroup], S ->
|
|
890
|
+
function(x, p)
|
|
891
|
+
if x![1] = 0 then
|
|
892
|
+
return x;
|
|
893
|
+
fi;
|
|
894
|
+
return Objectify(TypeObj(x), [x![1], x![2] * p, x![3], x![4]]);
|
|
895
|
+
end);
|
|
896
|
+
|
|
897
|
+
InstallMethod(StabilizerAction, "for a McAlister triple subsemigroup",
|
|
898
|
+
[IsMcAlisterTripleSubsemigroup], S ->
|
|
899
|
+
function(x, p)
|
|
900
|
+
local T;
|
|
901
|
+
T := MTSEParent(x);
|
|
902
|
+
return MTSE(T, x[1], x[2] * p);
|
|
903
|
+
end);
|
|
904
|
+
|
|
905
|
+
InstallMethod(StabilizerAction, "for a matrix semigroup",
|
|
906
|
+
[IsMatrixOverFiniteFieldSemigroup], S ->
|
|
907
|
+
{x, y} -> MatrixOverFiniteFieldStabilizerAction(S, x, y));
|
|
908
|
+
|
|
909
|
+
# IsActingSemigroupWithFixedDegreeMultiplication should be <true> if and only
|
|
910
|
+
# if it is only possible to multiply elements of the type in the semigroup with
|
|
911
|
+
# equal degrees.
|
|
912
|
+
|
|
913
|
+
InstallMethod(IsActingSemigroupWithFixedDegreeMultiplication,
|
|
914
|
+
"for a transformation semigroup",
|
|
915
|
+
[IsTransformationSemigroup and IsActingSemigroup], ReturnFalse);
|
|
916
|
+
|
|
917
|
+
InstallTrueMethod(IsActingSemigroupWithFixedDegreeMultiplication,
|
|
918
|
+
IsBipartitionSemigroup and IsActingSemigroup);
|
|
919
|
+
|
|
920
|
+
InstallMethod(IsActingSemigroupWithFixedDegreeMultiplication,
|
|
921
|
+
"for an acting partial perm semigroup",
|
|
922
|
+
[IsPartialPermSemigroup and IsActingSemigroup], ReturnFalse);
|
|
923
|
+
|
|
924
|
+
# this is not really relevant here.
|
|
925
|
+
InstallMethod(IsActingSemigroupWithFixedDegreeMultiplication,
|
|
926
|
+
"for an acting Rees 0-matrix subsemigroup",
|
|
927
|
+
[IsReesZeroMatrixSubsemigroup and IsActingSemigroup], ReturnFalse);
|
|
928
|
+
|
|
929
|
+
InstallMethod(IsActingSemigroupWithFixedDegreeMultiplication,
|
|
930
|
+
"for a McAlister triple subsemigroup",
|
|
931
|
+
[IsMcAlisterTripleSubsemigroup and IsActingSemigroup], ReturnFalse);
|
|
932
|
+
|
|
933
|
+
InstallTrueMethod(IsActingSemigroupWithFixedDegreeMultiplication,
|
|
934
|
+
IsMatrixOverFiniteFieldSemigroup);
|
|
935
|
+
|
|
936
|
+
InstallMethod(SchutzGpMembership, "for a transformation semigroup",
|
|
937
|
+
[IsTransformationSemigroup],
|
|
938
|
+
S -> {stab, x} -> SiftedPermutation(stab, x) = ());
|
|
939
|
+
|
|
940
|
+
InstallMethod(SchutzGpMembership, "for a partial perm semigroup",
|
|
941
|
+
[IsPartialPermSemigroup],
|
|
942
|
+
S -> {stab, x} -> SiftedPermutation(stab, x) = ());
|
|
943
|
+
|
|
944
|
+
InstallMethod(SchutzGpMembership, "for a Rees 0-matrix subsemigroup",
|
|
945
|
+
[IsReesZeroMatrixSubsemigroup],
|
|
946
|
+
S -> {stab, x} -> SiftedPermutation(stab, x) = ());
|
|
947
|
+
|
|
948
|
+
InstallMethod(SchutzGpMembership, "for a McAlister triple subsemigroup",
|
|
949
|
+
[IsMcAlisterTripleSubsemigroup],
|
|
950
|
+
S -> {stab, x} -> SiftedPermutation(stab, x) = ());
|
|
951
|
+
|
|
952
|
+
InstallMethod(SchutzGpMembership, "for a bipartition semigroup",
|
|
953
|
+
[IsBipartitionSemigroup],
|
|
954
|
+
S -> {stab, x} -> SiftedPermutation(stab, x) = ());
|
|
955
|
+
|
|
956
|
+
InstallMethod(SchutzGpMembership, "for a matrix semigroup",
|
|
957
|
+
[IsMatrixOverFiniteFieldSemigroup],
|
|
958
|
+
S -> {stab, x} -> x in stab);
|
|
959
|
+
|
|
960
|
+
# One or a fake one for those types of object without one.
|
|
961
|
+
|
|
962
|
+
InstallMethod(FakeOne, "for a transformation collection",
|
|
963
|
+
[IsTransformationCollection], One);
|
|
964
|
+
|
|
965
|
+
InstallMethod(FakeOne, "for a partial perm collection",
|
|
966
|
+
[IsPartialPermCollection], One);
|
|
967
|
+
|
|
968
|
+
InstallMethod(FakeOne, "for a bipartition collection",
|
|
969
|
+
[IsBipartitionCollection], One);
|
|
970
|
+
|
|
971
|
+
InstallMethod(FakeOne, "for a Rees 0-matrix semigroup element collection",
|
|
972
|
+
[IsReesZeroMatrixSemigroupElementCollection], R -> SEMIGROUPS.UniversalFakeOne);
|
|
973
|
+
|
|
974
|
+
InstallMethod(FakeOne, "for a McAlister triple semigroup element collection",
|
|
975
|
+
[IsMcAlisterTripleSemigroupElementCollection],
|
|
976
|
+
S -> SEMIGROUPS.UniversalFakeOne);
|
|
977
|
+
|
|
978
|
+
# Matrix semigroup elements
|
|
979
|
+
InstallMethod(FakeOne, "for an FFE coll coll coll",
|
|
980
|
+
[IsFFECollCollColl],
|
|
981
|
+
function(coll)
|
|
982
|
+
Assert(1, ForAll(coll, IsMatrixObjOverFiniteField));
|
|
983
|
+
Assert(1, ForAll(coll, x -> NrRows(x) = NrRows(Representative(coll))));
|
|
984
|
+
return One(Representative(coll));
|
|
985
|
+
end);
|
|
986
|
+
|
|
987
|
+
# missing hash functions
|
|
988
|
+
|
|
989
|
+
SEMIGROUPS.HashFunctionRZMSE := function(x, data, func)
|
|
990
|
+
if x![1] = 0 then
|
|
991
|
+
return 1;
|
|
992
|
+
fi;
|
|
993
|
+
# Use some big primes that are near the default hash table size
|
|
994
|
+
if IsNBitsPcWordRep(x![2]) then
|
|
995
|
+
return (104723 * x![1] + 104729 * x![3] + func(x![2], data))
|
|
996
|
+
mod data[2] + 1;
|
|
997
|
+
else
|
|
998
|
+
return (104723 * x![1] + 104729 * x![3] + func(x![2], data)) mod data + 1;
|
|
999
|
+
fi;
|
|
1000
|
+
end;
|
|
1001
|
+
|
|
1002
|
+
InstallMethod(ChooseHashFunction,
|
|
1003
|
+
"for a Rees 0-matrix semigroup element and integer",
|
|
1004
|
+
[IsReesZeroMatrixSemigroupElement, IsInt],
|
|
1005
|
+
function(x, hashlen)
|
|
1006
|
+
local R, data, under, func;
|
|
1007
|
+
|
|
1008
|
+
R := ReesMatrixSemigroupOfFamily(FamilyObj(x));
|
|
1009
|
+
if IsMultiplicativeZero(R, x) then
|
|
1010
|
+
x := EmptyPlist(3);
|
|
1011
|
+
x[2] := Representative(UnderlyingSemigroup(R));
|
|
1012
|
+
fi;
|
|
1013
|
+
if IsNBitsPcWordRep(x![2]) then
|
|
1014
|
+
under := ChooseHashFunction(x![2], hashlen).func;
|
|
1015
|
+
data := ChooseHashFunction(x![2], hashlen).data;
|
|
1016
|
+
else
|
|
1017
|
+
under := ChooseHashFunction(x![2], hashlen).func;
|
|
1018
|
+
data := ChooseHashFunction(x![2], hashlen).data;
|
|
1019
|
+
fi;
|
|
1020
|
+
if data = fail then
|
|
1021
|
+
data := hashlen;
|
|
1022
|
+
fi;
|
|
1023
|
+
|
|
1024
|
+
func := {x, hashlen} -> SEMIGROUPS.HashFunctionRZMSE(x, data, under);
|
|
1025
|
+
|
|
1026
|
+
return rec(func := func, data := data);
|
|
1027
|
+
end);
|
|
1028
|
+
|
|
1029
|
+
# fallback method for hashing
|
|
1030
|
+
|
|
1031
|
+
InstallMethod(ChooseHashFunction, "for an object and an int",
|
|
1032
|
+
[IsObject, IsInt],
|
|
1033
|
+
{p, hashlen} -> rec(func := {v, data} -> 1, data := fail));
|
|
1034
|
+
|
|
1035
|
+
# The next two methods are more general than might seem necessary but
|
|
1036
|
+
# apparently ReesZeroMatrixSemigroup'S satisfying IsWholeFamily are not in
|
|
1037
|
+
# IsActingSemigroup but their ideals are, and we still require a method for
|
|
1038
|
+
# ConvertToInternalElement as a result.
|
|
1039
|
+
|
|
1040
|
+
InstallMethod(ConvertToInternalElement,
|
|
1041
|
+
"for a semigroup and mult. elt.",
|
|
1042
|
+
[IsSemigroup, IsMultiplicativeElement],
|
|
1043
|
+
{S, x} -> x);
|
|
1044
|
+
|
|
1045
|
+
InstallMethod(ConvertToExternalElement,
|
|
1046
|
+
"for a semigroup and mult. elt.",
|
|
1047
|
+
[IsSemigroup, IsMultiplicativeElement],
|
|
1048
|
+
{S, x} -> x);
|
|
1049
|
+
|
|
1050
|
+
InstallMethod(ConvertToInternalElement,
|
|
1051
|
+
"for an acting matrix over ff semigroup and matrix obj",
|
|
1052
|
+
[IsActingSemigroup and IsMatrixOverFiniteFieldSemigroup, IsMatrixObj],
|
|
1053
|
+
function(S, mat)
|
|
1054
|
+
local bd, n;
|
|
1055
|
+
|
|
1056
|
+
Assert(1, IsMatrixObjOverFiniteField(mat));
|
|
1057
|
+
if NrRows(mat) = NrRows(Representative(S)) + 1 then
|
|
1058
|
+
return mat;
|
|
1059
|
+
fi;
|
|
1060
|
+
Assert(1, NrRows(mat) = NrRows(Representative(S)));
|
|
1061
|
+
|
|
1062
|
+
bd := BaseDomain(mat);
|
|
1063
|
+
n := NrRows(mat);
|
|
1064
|
+
mat := List([1 .. n],
|
|
1065
|
+
i -> Concatenation(mat[i], [Zero(bd)]));
|
|
1066
|
+
Add(mat, ZeroMatrix(bd, 1, n + 1)[1]);
|
|
1067
|
+
mat[n + 1, n + 1] := One(bd);
|
|
1068
|
+
return Matrix(bd, mat);
|
|
1069
|
+
end);
|
|
1070
|
+
|
|
1071
|
+
InstallMethod(ConvertToExternalElement,
|
|
1072
|
+
"for an acting matrix over ff semigroup and matrix obj",
|
|
1073
|
+
[IsActingSemigroup and IsMatrixOverFiniteFieldSemigroup, IsMatrixObj],
|
|
1074
|
+
function(S, mat)
|
|
1075
|
+
local n;
|
|
1076
|
+
|
|
1077
|
+
Assert(1, IsMatrixObjOverFiniteField(mat));
|
|
1078
|
+
if NrRows(mat) = NrRows(Representative(S)) then
|
|
1079
|
+
return mat;
|
|
1080
|
+
fi;
|
|
1081
|
+
Assert(1, NrRows(mat) = NrRows(Representative(S)) + 1);
|
|
1082
|
+
|
|
1083
|
+
n := NrRows(mat) - 1;
|
|
1084
|
+
return Matrix(Unpack(mat){[1 .. n]}{[1 .. n]}, mat);
|
|
1085
|
+
end);
|
|
1086
|
+
|
|
1087
|
+
InstallMethod(WeakInverse, "for a transformation",
|
|
1088
|
+
[IsTransformation], InverseOfTransformation);
|
|
1089
|
+
|
|
1090
|
+
InstallMethod(WeakInverse, "for a partial perm",
|
|
1091
|
+
[IsPartialPerm], InverseMutable);
|
|
1092
|
+
|
|
1093
|
+
InstallMethod(WeakInverse, "for a bipartition",
|
|
1094
|
+
[IsBipartition], Star);
|