passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-musllinux_1_2_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-musl-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1068 -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 +356 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +5 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
- passagemath_gap_pkg_semigroups.libs/libgcc_s-0cd532bd.so.1 +0 -0
- passagemath_gap_pkg_semigroups.libs/libsemigroups-f0b7066b.so.2.0.0 +0 -0
- passagemath_gap_pkg_semigroups.libs/libstdc++-5d72f927.so.6.0.33 +0 -0
- sage/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/gap_pkg_semigroups.abi3.so +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## semigroups/semidp.gd
|
|
4
|
+
## Copyright (C) 2017-2022 Wilf A. Wilson
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
# This file contains methods for creating direct products of semigroups
|
|
12
|
+
|
|
13
|
+
DeclareAttribute("SemigroupDirectProductInfo", IsSemigroup, "mutable");
|
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## semigroups/semidp.gi
|
|
4
|
+
## Copyright (C) 2017-2022 Wilf A. Wilson
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
### degreefunc := function(semigroup)
|
|
12
|
+
# Takes a semigroup and returns its degree.
|
|
13
|
+
#
|
|
14
|
+
### convert := function(element, degree, offset)
|
|
15
|
+
# Takes an element, the degree of the semigroup it belongs to, and an offset
|
|
16
|
+
# to say by how much to "increase" the values in its representation.
|
|
17
|
+
# The function then returns an object representing this offset element,
|
|
18
|
+
# in a form that is readily used by the following <combine> function.
|
|
19
|
+
#
|
|
20
|
+
### combine := function(list)
|
|
21
|
+
# Takes a list of elements in the form given by <convert>, and forms the
|
|
22
|
+
# corresponding direct product element.
|
|
23
|
+
#
|
|
24
|
+
### restrict := function(element, i, j)
|
|
25
|
+
# (Is used to compute the projections from the product onto its factors).
|
|
26
|
+
# Takes an element, and two integers i and j. The function then returns the
|
|
27
|
+
# restriction of then element corresponding to its "action" on [i + 1 .. i + j].
|
|
28
|
+
# It's kind of the inverse of convert & combine.
|
|
29
|
+
|
|
30
|
+
# See DirectProductOp for transformation semigroups or bipartition semigroups
|
|
31
|
+
# for examples of how to use SEMIGROUPS.DirectProductOp.
|
|
32
|
+
|
|
33
|
+
# TODO(later): add reference to a description & proof of this algorithm, when
|
|
34
|
+
# possible.
|
|
35
|
+
|
|
36
|
+
SEMIGROUPS.DirectProductOp := function(S, degree, convert, combine, restrict)
|
|
37
|
+
local f, create, n, gens_old, gens_new, indecomp, pre_mult, pos_mult, out,
|
|
38
|
+
degrees, offsets, idems, idem, factorization, y, len, w, hasindecomp, elt, p,
|
|
39
|
+
x, indecomp_out, D, embedding, projection, i, choice;
|
|
40
|
+
|
|
41
|
+
if not IsList(S) or IsEmpty(S) then
|
|
42
|
+
ErrorNoReturn("the 1st argument is not a non-empty list");
|
|
43
|
+
elif ForAll(S, HasGeneratorsOfInverseMonoid) then
|
|
44
|
+
f := GeneratorsOfInverseMonoid;
|
|
45
|
+
create := InverseMonoid;
|
|
46
|
+
elif ForAll(S, IsMonoid) then
|
|
47
|
+
f := GeneratorsOfMonoid;
|
|
48
|
+
create := Monoid;
|
|
49
|
+
else
|
|
50
|
+
f := GeneratorsOfSemigroup;
|
|
51
|
+
create := Semigroup;
|
|
52
|
+
fi;
|
|
53
|
+
|
|
54
|
+
n := Length(S);
|
|
55
|
+
gens_old := List(S, f);
|
|
56
|
+
gens_new := List([1 .. n], i -> []);
|
|
57
|
+
indecomp := List([1 .. n], i -> []);
|
|
58
|
+
pre_mult := List([1 .. n], i -> []);
|
|
59
|
+
pos_mult := List([1 .. n], i -> []);
|
|
60
|
+
out := [];
|
|
61
|
+
|
|
62
|
+
# The semigroup <S[i]> has degree <degrees[i]>.
|
|
63
|
+
# In the product, we "offset" the representation of <S[i]> by <offsets[i]>.
|
|
64
|
+
# eg. if <S[i]> is a transformation semigroup on [1 .. m], then in the product
|
|
65
|
+
# it is imagined as a transformation semigroup on [1 + offset .. m + offset].
|
|
66
|
+
#
|
|
67
|
+
# This way, the representations are "disjoint", and so the "union" of the
|
|
68
|
+
# representations of all the factors gives a representation of the product.
|
|
69
|
+
degrees := List(S, degree);
|
|
70
|
+
offsets := [0];
|
|
71
|
+
for i in [2 .. n] do
|
|
72
|
+
offsets[i] := offsets[i - 1] + degrees[i - 1];
|
|
73
|
+
od;
|
|
74
|
+
|
|
75
|
+
# To create the embeddings of each factor into the product, we require an
|
|
76
|
+
# idempotent from each factor. For the monoids, we take its identity.
|
|
77
|
+
# Otherwise, we select an arbitrary idempotent from the minimal ideal, simply
|
|
78
|
+
# because it is probably an efficient way to come up with a single idempotent.
|
|
79
|
+
idems := EmptyPlist(n);
|
|
80
|
+
for i in [1 .. n] do
|
|
81
|
+
idem := MultiplicativeNeutralElement(S[i]);
|
|
82
|
+
if idem = fail then
|
|
83
|
+
idem := MultiplicativeNeutralElement(GroupHClass(MinimalDClass(S[i])));
|
|
84
|
+
fi;
|
|
85
|
+
idems[i] := convert(idem, degrees[i], offsets[i]);
|
|
86
|
+
od;
|
|
87
|
+
|
|
88
|
+
# For each factor <i> and for each generator <x> in <gens_old[i]>, either <x>
|
|
89
|
+
# is indecomposable, or we may find a non-trivial factorization of <x>, and
|
|
90
|
+
# hence express <x> as a product <x = pre_mult * x'> and <x = x'' * pos_mult>,
|
|
91
|
+
# for some generators <x'> and <x''> in <gens_old[i]>, and for some elements
|
|
92
|
+
# <pre_mult> and <pos_mult> in <S[i]>.
|
|
93
|
+
#
|
|
94
|
+
# We want to record which case happens, and in the second case, get our hands
|
|
95
|
+
# on the relevant elements, and store them in <pre_mult[i]> and <pos_mult[i]>,
|
|
96
|
+
# as appropriate.
|
|
97
|
+
for i in [1 .. n] do
|
|
98
|
+
if IsMonoidAsSemigroup(S[i]) then
|
|
99
|
+
# For a monoid, every generator is decomposable. Simply convert each gen,
|
|
100
|
+
# and use the identity as the pre_mult and pos_mult of each gen.
|
|
101
|
+
for x in gens_old[i] do
|
|
102
|
+
AddSet(gens_new[i], convert(x, degrees[i], offsets[i]));
|
|
103
|
+
od;
|
|
104
|
+
# Remember that idems[i] = MultiplicativeNeutralElement(S[i]).
|
|
105
|
+
AddSet(pre_mult[i], idems[i]);
|
|
106
|
+
AddSet(pos_mult[i], idems[i]);
|
|
107
|
+
else
|
|
108
|
+
for x in gens_old[i] do
|
|
109
|
+
# Attempt to find a non-trivial factorization of <x>.
|
|
110
|
+
factorization := NonTrivialFactorization(S[i], x);
|
|
111
|
+
y := convert(x, degrees[i], offsets[i]);
|
|
112
|
+
if factorization = fail then
|
|
113
|
+
# <x> is indecomposable; record it as such.
|
|
114
|
+
AddSet(indecomp[i], y);
|
|
115
|
+
else
|
|
116
|
+
# We can decompose <x>, so we can find a <pre_mult> and <pos_mult>.
|
|
117
|
+
AddSet(gens_new[i], y);
|
|
118
|
+
len := Length(factorization);
|
|
119
|
+
if i > 1 then
|
|
120
|
+
# <pos_mult>s are not needed for the first factor
|
|
121
|
+
w := EvaluateWord(gens_old[i], factorization{[1 .. len - 1]});
|
|
122
|
+
AddSet(pre_mult[i], convert(w, degrees[i], offsets[i]));
|
|
123
|
+
fi;
|
|
124
|
+
if i < n then
|
|
125
|
+
# <pre_mult>s are not needed for the final factor
|
|
126
|
+
w := EvaluateWord(gens_old[i], factorization{[2 .. len]});
|
|
127
|
+
AddSet(pos_mult[i], convert(w, degrees[i], offsets[i]));
|
|
128
|
+
fi;
|
|
129
|
+
fi;
|
|
130
|
+
od;
|
|
131
|
+
fi;
|
|
132
|
+
od;
|
|
133
|
+
|
|
134
|
+
# Each indecomposable element of <S[i]> has to appear as a generator of the
|
|
135
|
+
# product with every possible combination of elements from the other factors.
|
|
136
|
+
hasindecomp := Filtered([1 .. n], i -> not IsEmpty(indecomp[i]));
|
|
137
|
+
if not IsEmpty(hasindecomp) then
|
|
138
|
+
elt := EmptyPlist(n);
|
|
139
|
+
for i in [1 .. n] do
|
|
140
|
+
# For each factor <i> with indecomposable elements, we are required to
|
|
141
|
+
# get the Elements of all the other factors. If <i> is unique we do not
|
|
142
|
+
# need to enumerate <S[i]>; otherwise, we must enumerate *every* factor.
|
|
143
|
+
if hasindecomp <> [i] then
|
|
144
|
+
elt[i] := List(Elements(S[i]), x -> convert(x, degrees[i], offsets[i]));
|
|
145
|
+
fi;
|
|
146
|
+
od;
|
|
147
|
+
for i in hasindecomp do
|
|
148
|
+
# For each factor <i> with indecomposable elements, and for each indecomp
|
|
149
|
+
# generators <x>, we create the generator of the product that corresponds
|
|
150
|
+
# to <x> with all possible combinations of other elements from the other
|
|
151
|
+
# factors.
|
|
152
|
+
#
|
|
153
|
+
# This appears more complicated than necessary because of partial perms.
|
|
154
|
+
p := List([1 .. i - 1], j -> [1 .. Length(elt[j])]);
|
|
155
|
+
Add(p, [1 .. Length(indecomp[i])]);
|
|
156
|
+
Append(p, List([i + 1 .. n], j -> [1 .. Length(elt[j])]));
|
|
157
|
+
for choice in IteratorOfCartesianProduct(p) do
|
|
158
|
+
# choice[j]: we are choosing <elt[j][choice[j]]> to be the element from
|
|
159
|
+
# the <j>^th factor, to appear with...
|
|
160
|
+
# choice[i]: we are choosing <indecomp[i][choice[i]]>, the
|
|
161
|
+
# <choice[i]>^th indecomposable gen of the <i>^th factor.
|
|
162
|
+
x := Concatenation(List([1 .. i - 1], j -> elt[j][choice[j]]),
|
|
163
|
+
[indecomp[i][choice[i]]],
|
|
164
|
+
List([i + 1 .. n], j -> elt[j][choice[j]]));
|
|
165
|
+
AddSet(out, combine(x));
|
|
166
|
+
od;
|
|
167
|
+
od;
|
|
168
|
+
fi;
|
|
169
|
+
|
|
170
|
+
# The indecomposable elements of the produdct are precisely those generators
|
|
171
|
+
# that we have already created. The product has indecomposable elements if and
|
|
172
|
+
# only if any factor has indecomposable elements; the indecomposable elements
|
|
173
|
+
# of the product are those such that the i^th projection of the element is
|
|
174
|
+
# indecomposable, for some factor <i>.
|
|
175
|
+
indecomp_out := ShallowCopy(out);
|
|
176
|
+
|
|
177
|
+
# Each decomposable generator of <S[i]> will appear as a generator of the
|
|
178
|
+
# product with every pos_mult in the j^th factor (j < i), and every pre_mult
|
|
179
|
+
# in the k^th factor (k > i). (These strict inequalities are why we do not
|
|
180
|
+
# require <pos_mult>s for the first factor, or <pre_mult>s for the final
|
|
181
|
+
# factor.)
|
|
182
|
+
#
|
|
183
|
+
# If any <gens_new[i]> is empty, then no such generators can be created, and
|
|
184
|
+
# so we skip this step.
|
|
185
|
+
if not ForAny(gens_new, IsEmpty) then
|
|
186
|
+
for i in [1 .. n] do
|
|
187
|
+
# Again, this appears more complicated than it should.
|
|
188
|
+
p := Concatenation(List([1 .. i - 1], j -> [1 .. Length(pos_mult[j])]),
|
|
189
|
+
[[1 .. Length(gens_new[i])]],
|
|
190
|
+
List([i + 1 .. n], j -> [1 .. Length(pre_mult[j])]));
|
|
191
|
+
for choice in IteratorOfCartesianProduct(p) do
|
|
192
|
+
x := Concatenation(List([1 .. i - 1], j -> pos_mult[j][choice[j]]),
|
|
193
|
+
[gens_new[i][choice[i]]],
|
|
194
|
+
List([i + 1 .. n], j -> pre_mult[j][choice[j]]));
|
|
195
|
+
AddSet(out, combine(x));
|
|
196
|
+
od;
|
|
197
|
+
od;
|
|
198
|
+
fi;
|
|
199
|
+
|
|
200
|
+
D := create(out);
|
|
201
|
+
SetIndecomposableElements(D, indecomp_out);
|
|
202
|
+
SetIsSurjectiveSemigroup(D, IsEmpty(indecomp_out));
|
|
203
|
+
if ForAny(gens_new, IsEmpty) then
|
|
204
|
+
SetMinimalSemigroupGeneratingSet(D, indecomp_out);
|
|
205
|
+
fi;
|
|
206
|
+
|
|
207
|
+
# Store information to be able to construct embeddings and projections
|
|
208
|
+
embedding := function(x, i)
|
|
209
|
+
return combine(Concatenation(idems{[1 .. i - 1]},
|
|
210
|
+
[convert(x, degrees[i], offsets[i])],
|
|
211
|
+
idems{[i + 1 .. n]}));
|
|
212
|
+
end;
|
|
213
|
+
projection := {x, i} -> restrict(x, offsets[i], degrees[i]);
|
|
214
|
+
SetSemigroupDirectProductInfo(D, rec(factors := S,
|
|
215
|
+
nrfactors := n,
|
|
216
|
+
embedding := embedding,
|
|
217
|
+
embeddings := [],
|
|
218
|
+
projection := projection,
|
|
219
|
+
projections := []));
|
|
220
|
+
return D;
|
|
221
|
+
end;
|
|
222
|
+
|
|
223
|
+
# Transformation semigroups
|
|
224
|
+
|
|
225
|
+
InstallMethod(DirectProductOp, "for a list and a transformation semigroup",
|
|
226
|
+
[IsList, IsTransformationSemigroup],
|
|
227
|
+
function(list, S)
|
|
228
|
+
local combine, convert, restrict;
|
|
229
|
+
|
|
230
|
+
if IsEmpty(list) then
|
|
231
|
+
ErrorNoReturn("the 1st argument (a list) is not non-empty");
|
|
232
|
+
elif not ForAny(list, T -> IsIdenticalObj(S, T)) then
|
|
233
|
+
ErrorNoReturn("the 2nd argument is not one of the semigroups ",
|
|
234
|
+
"contained in the 1st argument (a list)");
|
|
235
|
+
elif not ForAll(list, IsTransformationSemigroup) then
|
|
236
|
+
TryNextMethod();
|
|
237
|
+
fi;
|
|
238
|
+
|
|
239
|
+
combine := x -> Transformation(Concatenation(x));
|
|
240
|
+
convert := {element, degree, offset} ->
|
|
241
|
+
ImageListOfTransformation(element, degree) + offset;
|
|
242
|
+
restrict := function(element, offset, degree)
|
|
243
|
+
local im;
|
|
244
|
+
im := ImageListOfTransformation(element, offset + degree);
|
|
245
|
+
return Transformation(im{[offset + 1 .. offset + degree]} - offset);
|
|
246
|
+
end;
|
|
247
|
+
return SEMIGROUPS.DirectProductOp(list, DegreeOfTransformationSemigroup,
|
|
248
|
+
convert, combine, restrict);
|
|
249
|
+
end);
|
|
250
|
+
|
|
251
|
+
# Partial perm semigroups
|
|
252
|
+
|
|
253
|
+
InstallMethod(DirectProductOp, "for a list and a partial perm semigroup",
|
|
254
|
+
[IsList, IsPartialPermSemigroup],
|
|
255
|
+
function(list, S)
|
|
256
|
+
local degree, combine, convert, restrict;
|
|
257
|
+
|
|
258
|
+
if IsEmpty(list) then
|
|
259
|
+
ErrorNoReturn("the 1st argument (a list) is not non-empty");
|
|
260
|
+
elif not ForAny(list, T -> IsIdenticalObj(S, T)) then
|
|
261
|
+
ErrorNoReturn("the 2nd argument is not one of the semigroups ",
|
|
262
|
+
"contained in the 1st argument (a list)");
|
|
263
|
+
elif not ForAll(list, IsPartialPermSemigroup) then
|
|
264
|
+
TryNextMethod();
|
|
265
|
+
fi;
|
|
266
|
+
|
|
267
|
+
degree := S -> Maximum(DegreeOfPartialPermSemigroup(S),
|
|
268
|
+
CodegreeOfPartialPermSemigroup(S));
|
|
269
|
+
combine := x -> PartialPerm(Concatenation(List(x, y -> y[1])),
|
|
270
|
+
Concatenation(List(x, y -> y[2])));
|
|
271
|
+
convert := function(element, _, offset)
|
|
272
|
+
return [DomainOfPartialPerm(element) + offset,
|
|
273
|
+
ImageListOfPartialPerm(element) + offset];
|
|
274
|
+
end;
|
|
275
|
+
restrict := function(element, offset, degree)
|
|
276
|
+
local dom, start, stop, ran;
|
|
277
|
+
dom := DomainOfPartialPerm(element);
|
|
278
|
+
start := PositionSorted(dom, offset + 1);
|
|
279
|
+
stop := PositionSorted(dom, offset + degree);
|
|
280
|
+
if stop = Length(dom) + 1 or dom[stop] <> offset + degree then
|
|
281
|
+
stop := stop - 1;
|
|
282
|
+
fi;
|
|
283
|
+
dom := dom{[start .. stop]} - offset;
|
|
284
|
+
ran := ImageListOfPartialPerm(element){[start .. stop]} - offset;
|
|
285
|
+
return PartialPerm(dom, ran);
|
|
286
|
+
end;
|
|
287
|
+
return SEMIGROUPS.DirectProductOp(list, degree, convert, combine, restrict);
|
|
288
|
+
end);
|
|
289
|
+
|
|
290
|
+
# Bipartition semigroups
|
|
291
|
+
|
|
292
|
+
InstallMethod(DirectProductOp, "for a list and a bipartition semigroup",
|
|
293
|
+
[IsList, IsBipartitionSemigroup],
|
|
294
|
+
function(list, S)
|
|
295
|
+
local combine, convert, restrict;
|
|
296
|
+
|
|
297
|
+
if IsEmpty(list) then
|
|
298
|
+
ErrorNoReturn("the 1st argument (a list) is not non-empty");
|
|
299
|
+
elif not ForAny(list, T -> IsIdenticalObj(S, T)) then
|
|
300
|
+
ErrorNoReturn("the 2nd argument is not one of the semigroups ",
|
|
301
|
+
"contained in the 1st argument (a list)");
|
|
302
|
+
elif not ForAll(list, IsBipartitionSemigroup) then
|
|
303
|
+
TryNextMethod();
|
|
304
|
+
fi;
|
|
305
|
+
|
|
306
|
+
combine := x -> Bipartition(Concatenation(x));
|
|
307
|
+
convert := function(element, _, offset)
|
|
308
|
+
local x, i, j;
|
|
309
|
+
x := List(ExtRepOfObj(element), ShallowCopy);
|
|
310
|
+
for i in [1 .. Length(x)] do
|
|
311
|
+
for j in [1 .. Length(x[i])] do
|
|
312
|
+
if IsPosInt(x[i][j]) then
|
|
313
|
+
x[i][j] := x[i][j] + offset;
|
|
314
|
+
else
|
|
315
|
+
x[i][j] := x[i][j] - offset;
|
|
316
|
+
fi;
|
|
317
|
+
od;
|
|
318
|
+
od;
|
|
319
|
+
return x;
|
|
320
|
+
end;
|
|
321
|
+
restrict := function(element, offset, degree)
|
|
322
|
+
local new_bipartition, new_block, old_block, x;
|
|
323
|
+
new_bipartition := [];
|
|
324
|
+
for old_block in ExtRepOfObj(element) do
|
|
325
|
+
if AbsInt(old_block[1]) in [offset + 1 .. offset + degree] then
|
|
326
|
+
new_block := [];
|
|
327
|
+
for x in old_block do
|
|
328
|
+
if IsPosInt(x) then
|
|
329
|
+
Add(new_block, x - offset);
|
|
330
|
+
else
|
|
331
|
+
Add(new_block, x + offset);
|
|
332
|
+
fi;
|
|
333
|
+
od;
|
|
334
|
+
Add(new_bipartition, new_block);
|
|
335
|
+
fi;
|
|
336
|
+
od;
|
|
337
|
+
return Bipartition(new_bipartition);
|
|
338
|
+
end;
|
|
339
|
+
return SEMIGROUPS.DirectProductOp(list,
|
|
340
|
+
DegreeOfBipartitionSemigroup,
|
|
341
|
+
convert,
|
|
342
|
+
combine,
|
|
343
|
+
restrict);
|
|
344
|
+
end);
|
|
345
|
+
|
|
346
|
+
# PBR semigroups
|
|
347
|
+
|
|
348
|
+
InstallMethod(DirectProductOp, "for a list and a pbr semigroup",
|
|
349
|
+
[IsList, IsPBRSemigroup],
|
|
350
|
+
function(list, S)
|
|
351
|
+
local combine, convert, restrict;
|
|
352
|
+
|
|
353
|
+
if IsEmpty(list) then
|
|
354
|
+
ErrorNoReturn("the 1st argument (a list) is not non-empty");
|
|
355
|
+
elif not ForAny(list, T -> IsIdenticalObj(S, T)) then
|
|
356
|
+
ErrorNoReturn("the 2nd argument is not one of the semigroups ",
|
|
357
|
+
"contained in the 1st argument (a list)");
|
|
358
|
+
elif not ForAll(list, IsPBRSemigroup) then
|
|
359
|
+
TryNextMethod();
|
|
360
|
+
fi;
|
|
361
|
+
|
|
362
|
+
combine := x -> PBR(Concatenation(List(x, y -> y[1])),
|
|
363
|
+
Concatenation(List(x, y -> y[2])));
|
|
364
|
+
convert := function(element, degree, offset)
|
|
365
|
+
local x, i, j, k;
|
|
366
|
+
x := ShallowCopy(ExtRepOfObj(element));
|
|
367
|
+
for k in [1, 2] do
|
|
368
|
+
for i in [1 .. degree] do
|
|
369
|
+
for j in [1 .. Length(x[k][i])] do
|
|
370
|
+
if IsPosInt(x[k][i][j]) then
|
|
371
|
+
x[k][i][j] := x[k][i][j] + offset;
|
|
372
|
+
else
|
|
373
|
+
x[k][i][j] := x[k][i][j] - offset;
|
|
374
|
+
fi;
|
|
375
|
+
od;
|
|
376
|
+
od;
|
|
377
|
+
od;
|
|
378
|
+
return x;
|
|
379
|
+
end;
|
|
380
|
+
restrict := function(element, offset, degree)
|
|
381
|
+
local x, k, i, j;
|
|
382
|
+
x := [ExtRepOfObj(element)[1]{[offset + 1 .. offset + degree]},
|
|
383
|
+
ExtRepOfObj(element)[2]{[offset + 1 .. offset + degree]}];
|
|
384
|
+
for k in [1, 2] do
|
|
385
|
+
for i in [1 .. degree] do
|
|
386
|
+
for j in [1 .. Length(x[k][i])] do
|
|
387
|
+
if IsPosInt(x[k][i][j]) then
|
|
388
|
+
x[k][i][j] := x[k][i][j] - offset;
|
|
389
|
+
else
|
|
390
|
+
x[k][i][j] := x[k][i][j] + offset;
|
|
391
|
+
fi;
|
|
392
|
+
od;
|
|
393
|
+
od;
|
|
394
|
+
od;
|
|
395
|
+
return PBR(x[1], x[2]);
|
|
396
|
+
end;
|
|
397
|
+
return SEMIGROUPS.DirectProductOp(list, DegreeOfPBRSemigroup, convert,
|
|
398
|
+
combine, restrict);
|
|
399
|
+
end);
|
|
400
|
+
|
|
401
|
+
# Other types of semigroups, or a heterogeneous list of semigroups
|
|
402
|
+
|
|
403
|
+
InstallMethod(DirectProductOp, "for a list and a semigroup",
|
|
404
|
+
[IsList, IsSemigroup],
|
|
405
|
+
function(list, S)
|
|
406
|
+
local iso, prod, info;
|
|
407
|
+
|
|
408
|
+
if IsEmpty(list) then
|
|
409
|
+
ErrorNoReturn("the 1st argument (a list) is not non-empty");
|
|
410
|
+
elif not ForAny(list, T -> IsIdenticalObj(S, T)) then
|
|
411
|
+
ErrorNoReturn("the 2nd argument is not one of the semigroups ",
|
|
412
|
+
"contained in the 1st argument (a list)");
|
|
413
|
+
elif not ForAll(list, IsSemigroup and IsFinite) then
|
|
414
|
+
TryNextMethod();
|
|
415
|
+
fi;
|
|
416
|
+
|
|
417
|
+
iso := List(list, IsomorphismTransformationSemigroup);
|
|
418
|
+
prod := DirectProduct(List(iso, Range));
|
|
419
|
+
info := SemigroupDirectProductInfo(prod);
|
|
420
|
+
info.factors := list;
|
|
421
|
+
info.iso := iso;
|
|
422
|
+
return prod;
|
|
423
|
+
end);
|
|
424
|
+
|
|
425
|
+
InstallMethod(Embedding,
|
|
426
|
+
"for a semigroup with semigroup direct product info and a pos int",
|
|
427
|
+
[IsSemigroup and HasSemigroupDirectProductInfo, IsPosInt],
|
|
428
|
+
function(D, i)
|
|
429
|
+
local info, map;
|
|
430
|
+
info := SemigroupDirectProductInfo(D);
|
|
431
|
+
|
|
432
|
+
if IsBound(info.embeddings) and IsBound(info.embeddings[i]) then
|
|
433
|
+
return info.embeddings[i];
|
|
434
|
+
elif IsBound(info.nrfactors) and i > info.nrfactors then
|
|
435
|
+
ErrorNoReturn("the 2nd argument (a pos. int.) is not in ",
|
|
436
|
+
"the range [1 .. ", info.nrfactors, "]");
|
|
437
|
+
elif not IsBound(info.nrfactors) or not IsBound(info.embedding) then
|
|
438
|
+
ErrorNoReturn("the direct product information for the 1st ",
|
|
439
|
+
"argument (a semigroup) is corrupted, please ",
|
|
440
|
+
"re-create the object");
|
|
441
|
+
elif not IsBound(info.embeddings) then
|
|
442
|
+
info.embeddings := [];
|
|
443
|
+
fi;
|
|
444
|
+
|
|
445
|
+
if IsBound(info.iso) then
|
|
446
|
+
map := x -> info.embedding(x ^ info.iso[i], i);
|
|
447
|
+
map := SemigroupHomomorphismByFunctionNC(info.factors[i], D, map);
|
|
448
|
+
else
|
|
449
|
+
map := SemigroupHomomorphismByFunctionNC(info.factors[i],
|
|
450
|
+
D,
|
|
451
|
+
x -> info.embedding(x, i));
|
|
452
|
+
fi;
|
|
453
|
+
info.embeddings[i] := map;
|
|
454
|
+
return map;
|
|
455
|
+
end);
|
|
456
|
+
|
|
457
|
+
InstallMethod(Projection,
|
|
458
|
+
"for a semigroup with semigroup direct product info and a pos int",
|
|
459
|
+
[IsSemigroup and HasSemigroupDirectProductInfo, IsPosInt],
|
|
460
|
+
function(D, i)
|
|
461
|
+
local info, map;
|
|
462
|
+
info := SemigroupDirectProductInfo(D);
|
|
463
|
+
|
|
464
|
+
if IsBound(info.projections) and IsBound(info.projections[i]) then
|
|
465
|
+
return info.projections[i];
|
|
466
|
+
elif IsBound(info.nrfactors) and i > info.nrfactors then
|
|
467
|
+
ErrorNoReturn("the 2nd argument (a pos. int.) is not in ",
|
|
468
|
+
"the range [1 .. ", info.nrfactors, "]");
|
|
469
|
+
elif not IsBound(info.nrfactors) or not IsBound(info.projection) then
|
|
470
|
+
ErrorNoReturn("the direct product information for the 1st ",
|
|
471
|
+
"argument (a semigroup) is corrupted, please ",
|
|
472
|
+
"re-create the object");
|
|
473
|
+
elif not IsBound(info.projections) then
|
|
474
|
+
info.projections := [];
|
|
475
|
+
fi;
|
|
476
|
+
|
|
477
|
+
if IsBound(info.iso) then
|
|
478
|
+
map := x -> info.projection(x, i) ^ InverseGeneralMapping(info.iso[i]);
|
|
479
|
+
map := SemigroupHomomorphismByFunctionNC(D, info.factors[i], map);
|
|
480
|
+
else
|
|
481
|
+
map := SemigroupHomomorphismByFunctionNC(D,
|
|
482
|
+
info.factors[i],
|
|
483
|
+
x -> info.projection(x, i));
|
|
484
|
+
fi;
|
|
485
|
+
info.projections[i] := map;
|
|
486
|
+
return map;
|
|
487
|
+
end);
|
|
488
|
+
|
|
489
|
+
InstallMethod(Size,
|
|
490
|
+
"for a semigroup with semigroup direct product info",
|
|
491
|
+
[IsSemigroup and HasSemigroupDirectProductInfo],
|
|
492
|
+
SUM_FLAGS,
|
|
493
|
+
function(D)
|
|
494
|
+
if SemigroupDirectProductInfo(D).nrfactors = 1 then
|
|
495
|
+
TryNextMethod();
|
|
496
|
+
fi;
|
|
497
|
+
return Product(List(SemigroupDirectProductInfo(D).factors, Size));
|
|
498
|
+
end);
|
|
499
|
+
|
|
500
|
+
InstallMethod(IsCommutativeSemigroup,
|
|
501
|
+
"for a semigroup with semigroup direct product info",
|
|
502
|
+
[IsSemigroup and HasSemigroupDirectProductInfo],
|
|
503
|
+
SUM_FLAGS,
|
|
504
|
+
function(D)
|
|
505
|
+
if SemigroupDirectProductInfo(D).nrfactors = 1 then
|
|
506
|
+
TryNextMethod();
|
|
507
|
+
fi;
|
|
508
|
+
return ForAll(SemigroupDirectProductInfo(D).factors, IsCommutativeSemigroup);
|
|
509
|
+
end);
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## semigroups/semieunit.gd
|
|
4
|
+
## Copyright (C) 2016-2022 Christopher Russell
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
DeclareCategory("IsMcAlisterTripleSemigroupElement",
|
|
12
|
+
IsAssociativeElement and IsMultiplicativeElementWithInverse);
|
|
13
|
+
|
|
14
|
+
# This is a representation for McAlister triple semigroup elements, which are
|
|
15
|
+
# created via the function McAlisterTripleSemigroupElement.
|
|
16
|
+
#
|
|
17
|
+
# If x belongs to the representation IsMcAlisterTripleElementRep, then the
|
|
18
|
+
# components are:
|
|
19
|
+
#
|
|
20
|
+
# x![1]: The McAlister triple semigroup which this element belongs to
|
|
21
|
+
#
|
|
22
|
+
# x![2]: A vertex of the McAlisterTripleSemigroupSemilattice of x![1]
|
|
23
|
+
#
|
|
24
|
+
# x![3]: An element of the McAlisterTripleSemigroupGroup of x![1]
|
|
25
|
+
|
|
26
|
+
DeclareRepresentation("IsMcAlisterTripleSemigroupElementRep",
|
|
27
|
+
IsMcAlisterTripleSemigroupElement
|
|
28
|
+
and IsPositionalObjectRep, 3);
|
|
29
|
+
|
|
30
|
+
DeclareCategoryCollections("IsMcAlisterTripleSemigroupElement");
|
|
31
|
+
DeclareSynonymAttr("IsMTSE", IsMcAlisterTripleSemigroupElement);
|
|
32
|
+
DeclareSynonymAttr("IsMcAlisterTripleSemigroup",
|
|
33
|
+
IsInverseSemigroup and IsGeneratorsOfInverseSemigroup
|
|
34
|
+
and IsMcAlisterTripleSemigroupElementCollection
|
|
35
|
+
and IsWholeFamily and IsActingSemigroup);
|
|
36
|
+
DeclareSynonymAttr("IsMTS", IsMcAlisterTripleSemigroup);
|
|
37
|
+
DeclareSynonym("IsMcAlisterTripleSubsemigroup",
|
|
38
|
+
IsMcAlisterTripleSemigroupElementCollection and IsSemigroup);
|
|
39
|
+
|
|
40
|
+
InstallTrueMethod(IsFinite, IsMcAlisterTripleSubsemigroup);
|
|
41
|
+
|
|
42
|
+
# This is a representation for McAlister triple semigroup, which are
|
|
43
|
+
# created via the function McAlisterTripleSemigroup.
|
|
44
|
+
#
|
|
45
|
+
# The attributes stored upon creation are:
|
|
46
|
+
#
|
|
47
|
+
# McAlisterTripleSemigroupGroup
|
|
48
|
+
# McAlisterTripleSemigroupPartialOrder
|
|
49
|
+
# McAlisterTripleSemigroupSemilattice
|
|
50
|
+
# McAlisterTripleSemigroupAction
|
|
51
|
+
# McAlisterTripleSemigroupUnderlyingAction
|
|
52
|
+
# McAlisterTripleSemigroupActionHomomorphism
|
|
53
|
+
# GeneratorsOfSemigroup
|
|
54
|
+
#
|
|
55
|
+
# their purpose is described in the section of the user manual on McAlister
|
|
56
|
+
# triple semigroups.
|
|
57
|
+
|
|
58
|
+
DeclareRepresentation("IsMcAlisterTripleSemigroupDefaultRep",
|
|
59
|
+
IsMcAlisterTripleSemigroup and IsAttributeStoringRep,
|
|
60
|
+
[]);
|
|
61
|
+
|
|
62
|
+
InstallTrueMethod(IsGeneratorsOfInverseSemigroup,
|
|
63
|
+
IsMcAlisterTripleSemigroupElementCollection);
|
|
64
|
+
|
|
65
|
+
# Operations for creating McAlister triple semigroups
|
|
66
|
+
DeclareOperation("McAlisterTripleSemigroup",
|
|
67
|
+
[IsGroup, IsDigraph, IsDigraph, IsFunction]);
|
|
68
|
+
DeclareOperation("McAlisterTripleSemigroup",
|
|
69
|
+
[IsGroup, IsDigraph, IsHomogeneousList, IsFunction]);
|
|
70
|
+
DeclareOperation("McAlisterTripleSemigroup",
|
|
71
|
+
[IsPermGroup, IsDigraph, IsDigraph]);
|
|
72
|
+
DeclareOperation("McAlisterTripleSemigroup",
|
|
73
|
+
[IsPermGroup, IsDigraph, IsHomogeneousList]);
|
|
74
|
+
|
|
75
|
+
# Attributes for McAlister triple subsemigroups
|
|
76
|
+
DeclareAttribute("McAlisterTripleSemigroupGroup",
|
|
77
|
+
IsMcAlisterTripleSubsemigroup);
|
|
78
|
+
DeclareSynonymAttr("MTSGroup", McAlisterTripleSemigroupGroup);
|
|
79
|
+
DeclareAttribute("McAlisterTripleSemigroupAction",
|
|
80
|
+
IsMcAlisterTripleSubsemigroup);
|
|
81
|
+
DeclareSynonymAttr("MTSAction", McAlisterTripleSemigroupAction);
|
|
82
|
+
DeclareAttribute("McAlisterTripleSemigroupPartialOrder",
|
|
83
|
+
IsMcAlisterTripleSubsemigroup);
|
|
84
|
+
DeclareSynonymAttr("MTSPartialOrder", McAlisterTripleSemigroupPartialOrder);
|
|
85
|
+
DeclareAttribute("McAlisterTripleSemigroupSemilattice",
|
|
86
|
+
IsMcAlisterTripleSubsemigroup);
|
|
87
|
+
DeclareSynonymAttr("MTSSemilattice", McAlisterTripleSemigroupSemilattice);
|
|
88
|
+
DeclareAttribute("McAlisterTripleSemigroupActionHomomorphism",
|
|
89
|
+
IsMcAlisterTripleSubsemigroup);
|
|
90
|
+
DeclareSynonymAttr("MTSActionHomomorphism",
|
|
91
|
+
McAlisterTripleSemigroupActionHomomorphism);
|
|
92
|
+
DeclareAttribute("McAlisterTripleSemigroupUnderlyingAction",
|
|
93
|
+
IsMcAlisterTripleSubsemigroup);
|
|
94
|
+
DeclareSynonymAttr("MTSUnderlyingAction",
|
|
95
|
+
McAlisterTripleSemigroupUnderlyingAction);
|
|
96
|
+
DeclareAttribute("McAlisterTripleSemigroupSemilatticeVertexLabelInverseMap",
|
|
97
|
+
IsMcAlisterTripleSubsemigroup);
|
|
98
|
+
DeclareSynonymAttr("MTSSemilatticeVertexLabelInverseMap",
|
|
99
|
+
McAlisterTripleSemigroupSemilatticeVertexLabelInverseMap);
|
|
100
|
+
DeclareAttribute("OneImmutable",
|
|
101
|
+
IsMcAlisterTripleSemigroupElementCollection);
|
|
102
|
+
DeclareAttribute("McAlisterTripleSemigroupComponents",
|
|
103
|
+
IsMcAlisterTripleSubsemigroup);
|
|
104
|
+
DeclareSynonymAttr("MTSComponents",
|
|
105
|
+
McAlisterTripleSemigroupComponents);
|
|
106
|
+
DeclareAttribute("McAlisterTripleSemigroupQuotientDigraph",
|
|
107
|
+
IsMcAlisterTripleSubsemigroup);
|
|
108
|
+
DeclareSynonymAttr("MTSQuotientDigraph",
|
|
109
|
+
McAlisterTripleSemigroupQuotientDigraph);
|
|
110
|
+
|
|
111
|
+
# Operations for creating McAlister triple semigroup elements
|
|
112
|
+
DeclareOperation("McAlisterTripleSemigroupElement",
|
|
113
|
+
[IsMcAlisterTripleSemigroup,
|
|
114
|
+
IsPosInt, IsMultiplicativeElementWithInverse]);
|
|
115
|
+
DeclareSynonym("MTSE", McAlisterTripleSemigroupElement);
|
|
116
|
+
|
|
117
|
+
# Operations for McAlister triple semigroup elements
|
|
118
|
+
DeclareAttribute("McAlisterTripleSemigroupElementParent",
|
|
119
|
+
IsMcAlisterTripleSemigroupElementRep);
|
|
120
|
+
DeclareSynonymAttr("MTSEParent", McAlisterTripleSemigroupElementParent);
|
|
121
|
+
DeclareOperation("ELM_LIST", [IsMcAlisterTripleSemigroupElementRep, IsPosInt]);
|
|
122
|
+
|
|
123
|
+
# Inverse semigroup methods
|
|
124
|
+
DeclareAttribute("EUnitaryInverseCover", IsSemigroup);
|
|
125
|
+
DeclareProperty("IsFInverseSemigroup", IsSemigroup);
|
|
126
|
+
DeclareProperty("IsFInverseMonoid", IsSemigroup);
|