passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-gap-pkg-semigroups might be problematic. Click here for more details.
- gap/pkg/semigroups/CHANGELOG.md +1699 -0
- gap/pkg/semigroups/CONTRIBUTING.md +91 -0
- gap/pkg/semigroups/GNUmakefile +110 -0
- gap/pkg/semigroups/GNUmakefile.in +110 -0
- gap/pkg/semigroups/GPL +674 -0
- gap/pkg/semigroups/LICENSE +16 -0
- gap/pkg/semigroups/Makefile +26 -0
- gap/pkg/semigroups/Makefile.gappkg +225 -0
- gap/pkg/semigroups/PackageInfo.g +529 -0
- gap/pkg/semigroups/README.md +102 -0
- gap/pkg/semigroups/VERSIONS +112 -0
- gap/pkg/semigroups/aclocal.m4 +375 -0
- gap/pkg/semigroups/autogen.sh +25 -0
- gap/pkg/semigroups/bin/x86_64-pc-linux-gnu-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1069 -0
- gap/pkg/semigroups/config.status +1133 -0
- gap/pkg/semigroups/config.sub +1960 -0
- gap/pkg/semigroups/configure +9742 -0
- gap/pkg/semigroups/configure.ac +71 -0
- gap/pkg/semigroups/data/doc/greens.pickle +1 -0
- gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
- gap/pkg/semigroups/data/tst/bipart4 +10 -0
- gap/pkg/semigroups/data/tst/pperm10 +1 -0
- gap/pkg/semigroups/data/tst/tables.gz +0 -0
- gap/pkg/semigroups/data/tst/testdata +1 -0
- gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
- gap/pkg/semigroups/data/tst/trans3 +7 -0
- gap/pkg/semigroups/data/tst/trans3-old +7 -0
- gap/pkg/semigroups/environment.yml +7 -0
- gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
- gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
- gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
- gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
- gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
- gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
- gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
- gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
- gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
- gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
- gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
- gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
- gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
- gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
- gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
- gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
- gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
- gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
- gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
- gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
- gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
- gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
- gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
- gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
- gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
- gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
- gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
- gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
- gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
- gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
- gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
- gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
- gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
- gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
- gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
- gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
- gap/pkg/semigroups/gap/elements/elements.gd +11 -0
- gap/pkg/semigroups/gap/elements/elements.gi +121 -0
- gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
- gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
- gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
- gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
- gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
- gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
- gap/pkg/semigroups/gap/elements/star.gd +21 -0
- gap/pkg/semigroups/gap/elements/star.gi +21 -0
- gap/pkg/semigroups/gap/elements/trans.gd +13 -0
- gap/pkg/semigroups/gap/elements/trans.gi +50 -0
- gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
- gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
- gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
- gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
- gap/pkg/semigroups/gap/fp/word.gd +15 -0
- gap/pkg/semigroups/gap/fp/word.gi +67 -0
- gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
- gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
- gap/pkg/semigroups/gap/greens/acting.gd +81 -0
- gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
- gap/pkg/semigroups/gap/greens/generic.gd +117 -0
- gap/pkg/semigroups/gap/greens/generic.gi +630 -0
- gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
- gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
- gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
- gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
- gap/pkg/semigroups/gap/main/acting.gd +36 -0
- gap/pkg/semigroups/gap/main/acting.gi +779 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
- gap/pkg/semigroups/gap/main/graded.gd +26 -0
- gap/pkg/semigroups/gap/main/graded.gi +355 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
- gap/pkg/semigroups/gap/main/orbits.gd +24 -0
- gap/pkg/semigroups/gap/main/orbits.gi +512 -0
- gap/pkg/semigroups/gap/main/semiact.gd +20 -0
- gap/pkg/semigroups/gap/main/semiact.gi +821 -0
- gap/pkg/semigroups/gap/main/setup.gd +61 -0
- gap/pkg/semigroups/gap/main/setup.gi +1094 -0
- gap/pkg/semigroups/gap/obsolete.gd +9 -0
- gap/pkg/semigroups/gap/obsolete.gi +14 -0
- gap/pkg/semigroups/gap/options.g +55 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
- gap/pkg/semigroups/gap/tools/display.gd +24 -0
- gap/pkg/semigroups/gap/tools/display.gi +749 -0
- gap/pkg/semigroups/gap/tools/io.gd +17 -0
- gap/pkg/semigroups/gap/tools/io.gi +543 -0
- gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
- gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
- gap/pkg/semigroups/gap/tools/utils.gd +19 -0
- gap/pkg/semigroups/gap/tools/utils.gi +756 -0
- gap/pkg/semigroups/gapbind14/.ccls +18 -0
- gap/pkg/semigroups/gapbind14/.clang-format +104 -0
- gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
- gap/pkg/semigroups/gapbind14/LICENSE +674 -0
- gap/pkg/semigroups/gapbind14/README.md +76 -0
- gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
- gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
- gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
- gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
- gap/pkg/semigroups/gapbind14/demo/configure +34 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
- gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
- gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
- gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
- gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
- gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
- gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
- gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
- gap/pkg/semigroups/init.g +150 -0
- gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
- gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
- gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
- gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
- gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
- gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
- gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
- gap/pkg/semigroups/m4/find_gap.m4 +94 -0
- gap/pkg/semigroups/makedoc.g +153 -0
- gap/pkg/semigroups/prerequisites.sh +62 -0
- gap/pkg/semigroups/read.g +105 -0
- gap/pkg/semigroups/release.toml +6 -0
- gap/pkg/semigroups/tst/extreme/README +2 -0
- gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
- gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
- gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
- gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
- gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
- gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
- gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
- gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
- gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
- gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
- gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
- gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
- gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
- gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
- gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
- gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
- gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
- gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
- gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
- gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
- gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
- gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
- gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
- gap/pkg/semigroups/tst/standard/README +2 -0
- gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
- gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
- gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
- gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
- gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
- gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
- gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
- gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
- gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
- gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
- gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
- gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
- gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
- gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
- gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
- gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
- gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
- gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
- gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
- gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
- gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
- gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
- gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
- gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
- gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
- gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
- gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
- gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
- gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
- gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
- gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
- gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
- gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
- gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
- gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
- gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
- gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
- gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
- gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
- gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
- gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
- gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
- gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
- gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
- gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
- gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
- gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
- gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
- gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
- gap/pkg/semigroups/tst/standard/options.tst +54 -0
- gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
- gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
- gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
- gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
- gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
- gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
- gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
- gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
- gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
- gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
- gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
- gap/pkg/semigroups/tst/testinstall.tst +1815 -0
- gap/pkg/semigroups/tst/teststandard.g +22 -0
- gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
- gap/pkg/semigroups/tst/workspaces/load.g +11 -0
- gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
- gap/pkg/semigroups/tst/workspaces/save.g +14 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA +93 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +354 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +6 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
- passagemath_gap_pkg_semigroups.libs/libsemigroups-6be12ad2.so.2.0.0 +0 -0
- sage/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/gap_pkg_semigroups.abi3.so +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## attributes/dual.gd
|
|
4
|
+
## Copyright (C) 2018-2022 James D. Mitchell
|
|
5
|
+
## Finn Smith
|
|
6
|
+
##
|
|
7
|
+
## Licensing information can be found in the README file of this package.
|
|
8
|
+
##
|
|
9
|
+
#############################################################################
|
|
10
|
+
##
|
|
11
|
+
|
|
12
|
+
DeclareCategory("IsDualSemigroupElement", IsAssociativeElement);
|
|
13
|
+
DeclareCategoryCollections("IsDualSemigroupElement");
|
|
14
|
+
DeclareAttribute("DualSemigroup", IsSemigroup);
|
|
15
|
+
|
|
16
|
+
# TODO (major release): remove "Rep" and update docs
|
|
17
|
+
DeclareCategory("IsDualSemigroupRep",
|
|
18
|
+
IsDualSemigroupElementCollection and IsSemigroup);
|
|
19
|
+
|
|
20
|
+
DeclareAttribute("DualSemigroupOfFamily", IsFamily);
|
|
21
|
+
DeclareAttribute("AntiIsomorphismDualSemigroup", IsSemigroup);
|
|
22
|
+
DeclareGlobalFunction("UnderlyingElementOfDualSemigroupElement");
|
|
23
|
+
|
|
24
|
+
InstallTrueMethod(IsDualSemigroupRep,
|
|
25
|
+
IsSemigroup and IsDualSemigroupElementCollection);
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## attributes/dual.gi
|
|
4
|
+
## Copyright (C) 2018-2022 James D. Mitchell
|
|
5
|
+
## Finn Smith
|
|
6
|
+
##
|
|
7
|
+
## Licensing information can be found in the README file of this package.
|
|
8
|
+
##
|
|
9
|
+
#############################################################################
|
|
10
|
+
##
|
|
11
|
+
|
|
12
|
+
# This file contains an implementation of dual semigroups. We only provide
|
|
13
|
+
# enough functionality to allow dual semigroups to work as semigroups. This is
|
|
14
|
+
# to avoid having to install versions of every function in Semigroups specially
|
|
15
|
+
# for dual semigroup representations. In some cases special functions would be
|
|
16
|
+
# faster.
|
|
17
|
+
|
|
18
|
+
InstallMethod(DualSemigroup, "for a semigroup",
|
|
19
|
+
[IsSemigroup],
|
|
20
|
+
function(S)
|
|
21
|
+
local fam, dual, filts, type, map;
|
|
22
|
+
|
|
23
|
+
if IsDualSemigroupRep(S) then
|
|
24
|
+
if HasGeneratorsOfSemigroup(S) then
|
|
25
|
+
return Semigroup(List(GeneratorsOfSemigroup(S),
|
|
26
|
+
UnderlyingElementOfDualSemigroupElement));
|
|
27
|
+
fi;
|
|
28
|
+
ErrorNoReturn("this dual semigroup cannot be constructed ",
|
|
29
|
+
"without knowing generators");
|
|
30
|
+
fi;
|
|
31
|
+
|
|
32
|
+
fam := NewFamily("DualSemigroupElementsFamily", IsDualSemigroupElement);
|
|
33
|
+
dual := rec();
|
|
34
|
+
ObjectifyWithAttributes(dual,
|
|
35
|
+
NewType(CollectionsFamily(fam),
|
|
36
|
+
IsSemigroup and
|
|
37
|
+
IsWholeFamily and
|
|
38
|
+
IsDualSemigroupRep and
|
|
39
|
+
IsAttributeStoringRep),
|
|
40
|
+
DualSemigroup,
|
|
41
|
+
S,
|
|
42
|
+
CanUseGapFroidurePin,
|
|
43
|
+
CanUseFroidurePin(S));
|
|
44
|
+
|
|
45
|
+
filts := IsDualSemigroupElement;
|
|
46
|
+
if IsMultiplicativeElementWithOne(Representative(S)) then
|
|
47
|
+
filts := filts and IsMultiplicativeElementWithOne;
|
|
48
|
+
fi;
|
|
49
|
+
|
|
50
|
+
type := NewType(fam, filts);
|
|
51
|
+
fam!.type := type;
|
|
52
|
+
|
|
53
|
+
SetDualSemigroupOfFamily(fam, dual);
|
|
54
|
+
SetElementsFamily(FamilyObj(dual), fam);
|
|
55
|
+
|
|
56
|
+
if HasIsFinite(S) then
|
|
57
|
+
SetIsFinite(dual, IsFinite(S));
|
|
58
|
+
fi;
|
|
59
|
+
|
|
60
|
+
if IsTransformationSemigroup(S) then
|
|
61
|
+
map := AntiIsomorphismDualSemigroup(dual);
|
|
62
|
+
SetAntiIsomorphismTransformationSemigroup(dual, map);
|
|
63
|
+
fi;
|
|
64
|
+
|
|
65
|
+
if HasGeneratorsOfSemigroup(S) then
|
|
66
|
+
SetGeneratorsOfSemigroup(dual,
|
|
67
|
+
List(GeneratorsOfSemigroup(S),
|
|
68
|
+
x -> SEMIGROUPS.DualSemigroupElementNC(dual,
|
|
69
|
+
x)));
|
|
70
|
+
fi;
|
|
71
|
+
|
|
72
|
+
if HasGeneratorsOfMonoid(S) then
|
|
73
|
+
SetGeneratorsOfMonoid(dual,
|
|
74
|
+
List(GeneratorsOfMonoid(S),
|
|
75
|
+
x -> SEMIGROUPS.DualSemigroupElementNC(dual,
|
|
76
|
+
x)));
|
|
77
|
+
fi;
|
|
78
|
+
return dual;
|
|
79
|
+
end);
|
|
80
|
+
|
|
81
|
+
SEMIGROUPS.DualSemigroupElementNC := function(S, s)
|
|
82
|
+
if not IsDualSemigroupElement(s) then
|
|
83
|
+
return Objectify(ElementsFamily(FamilyObj(S))!.type, [s]);
|
|
84
|
+
fi;
|
|
85
|
+
return s![1];
|
|
86
|
+
end;
|
|
87
|
+
|
|
88
|
+
InstallMethod(AntiIsomorphismDualSemigroup, "for a semigroup",
|
|
89
|
+
[IsSemigroup],
|
|
90
|
+
function(S)
|
|
91
|
+
local dual, inv, iso;
|
|
92
|
+
|
|
93
|
+
dual := DualSemigroup(S);
|
|
94
|
+
iso := x -> SEMIGROUPS.DualSemigroupElementNC(dual, x);
|
|
95
|
+
inv := x -> SEMIGROUPS.DualSemigroupElementNC(S, x);
|
|
96
|
+
return MappingByFunction(S, dual, iso, inv);
|
|
97
|
+
end);
|
|
98
|
+
|
|
99
|
+
InstallGlobalFunction(UnderlyingElementOfDualSemigroupElement,
|
|
100
|
+
function(s)
|
|
101
|
+
if not IsDualSemigroupElement(s) then
|
|
102
|
+
ErrorNoReturn("the argument is not an element represented as a dual ",
|
|
103
|
+
"semigroup element");
|
|
104
|
+
fi;
|
|
105
|
+
return s![1];
|
|
106
|
+
end);
|
|
107
|
+
|
|
108
|
+
################################################################################
|
|
109
|
+
## Technical methods
|
|
110
|
+
################################################################################
|
|
111
|
+
|
|
112
|
+
InstallMethod(OneMutable, "for a dual semigroup element",
|
|
113
|
+
[IsDualSemigroupElement and IsMultiplicativeElementWithOne],
|
|
114
|
+
function(s)
|
|
115
|
+
local S, x;
|
|
116
|
+
S := DualSemigroupOfFamily(FamilyObj(s));
|
|
117
|
+
x := SEMIGROUPS.DualSemigroupElementNC(DualSemigroup(S), s);
|
|
118
|
+
return SEMIGROUPS.DualSemigroupElementNC(S, OneMutable(x));
|
|
119
|
+
end);
|
|
120
|
+
|
|
121
|
+
InstallMethod(MultiplicativeNeutralElement, "for a dual semigroup",
|
|
122
|
+
[IsDualSemigroupRep],
|
|
123
|
+
10, # add rank to beat enumeration methods
|
|
124
|
+
function(S)
|
|
125
|
+
local m;
|
|
126
|
+
m := MultiplicativeNeutralElement(DualSemigroup(S));
|
|
127
|
+
if m <> fail then
|
|
128
|
+
return SEMIGROUPS.DualSemigroupElementNC(S, m);
|
|
129
|
+
fi;
|
|
130
|
+
return fail;
|
|
131
|
+
end);
|
|
132
|
+
|
|
133
|
+
InstallMethod(Representative, "for a dual semigroup",
|
|
134
|
+
[IsDualSemigroupRep],
|
|
135
|
+
function(S)
|
|
136
|
+
if HasGeneratorsOfSemigroup(S) then
|
|
137
|
+
return GeneratorsOfSemigroup(S)[1];
|
|
138
|
+
fi;
|
|
139
|
+
return SEMIGROUPS.DualSemigroupElementNC(S, Representative(DualSemigroup(S)));
|
|
140
|
+
end);
|
|
141
|
+
|
|
142
|
+
InstallMethod(Size, "for a dual semigroup",
|
|
143
|
+
[IsDualSemigroupRep],
|
|
144
|
+
10, # add rank to beat enumeration methods
|
|
145
|
+
S -> Size(DualSemigroup(S)));
|
|
146
|
+
|
|
147
|
+
InstallMethod(AsList, "for a dual semigroup",
|
|
148
|
+
[IsDualSemigroupRep],
|
|
149
|
+
10, # add rank to beat enumeration methods
|
|
150
|
+
S -> List(DualSemigroup(S), s -> SEMIGROUPS.DualSemigroupElementNC(S, s)));
|
|
151
|
+
|
|
152
|
+
InstallMethod(\*, "for dual semigroup elements",
|
|
153
|
+
IsIdenticalObj,
|
|
154
|
+
[IsDualSemigroupElement, IsDualSemigroupElement],
|
|
155
|
+
{x, y} -> Objectify(FamilyObj(x)!.type, [y![1] * x![1]]));
|
|
156
|
+
|
|
157
|
+
InstallMethod(\=, "for dual semigroup elements",
|
|
158
|
+
IsIdenticalObj,
|
|
159
|
+
[IsDualSemigroupElement, IsDualSemigroupElement],
|
|
160
|
+
{x, y} -> x![1] = y![1]);
|
|
161
|
+
|
|
162
|
+
InstallMethod(\<, "for dual semigroup elements",
|
|
163
|
+
IsIdenticalObj,
|
|
164
|
+
[IsDualSemigroupElement, IsDualSemigroupElement],
|
|
165
|
+
{x, y} -> x![1] < y![1]);
|
|
166
|
+
|
|
167
|
+
InstallMethod(ViewObj, "for dual semigroup elements",
|
|
168
|
+
[IsDualSemigroupElement], PrintObj);
|
|
169
|
+
|
|
170
|
+
InstallMethod(PrintObj, "for dual semigroup elements",
|
|
171
|
+
[IsDualSemigroupElement],
|
|
172
|
+
function(x)
|
|
173
|
+
Print("<", ViewString(x![1]), " in the dual semigroup>");
|
|
174
|
+
end);
|
|
175
|
+
|
|
176
|
+
InstallMethod(ViewObj, "for a dual semigroup",
|
|
177
|
+
[IsDualSemigroupRep], PrintObj);
|
|
178
|
+
|
|
179
|
+
InstallMethod(PrintObj, "for a dual semigroup",
|
|
180
|
+
[IsDualSemigroupRep],
|
|
181
|
+
function(S)
|
|
182
|
+
Print("<dual semigroup of ",
|
|
183
|
+
ViewString(DualSemigroup(S)),
|
|
184
|
+
">");
|
|
185
|
+
end);
|
|
186
|
+
|
|
187
|
+
# InstallMethod(ViewString, "for dual semigroup elements",
|
|
188
|
+
# [IsDualSemigroupElement], PrintString);
|
|
189
|
+
#
|
|
190
|
+
# InstallMethod(PrintString, "for dual semigroup elements",
|
|
191
|
+
# [IsDualSemigroupElement],
|
|
192
|
+
# x -> StringFormatted("<{!v} in the dual semigroup>", x![1]);
|
|
193
|
+
#
|
|
194
|
+
# InstallMethod(ViewString, "for a dual semigroup",
|
|
195
|
+
# [IsDualSemigroupRep], PrintString);
|
|
196
|
+
#
|
|
197
|
+
# InstallMethod(PrintString, "for a dual semigroup",
|
|
198
|
+
# [IsDualSemigroupRep],
|
|
199
|
+
# S -> StringFormatted("<dual semigroup of {!v}>", DualSemigroup(S));
|
|
200
|
+
|
|
201
|
+
InstallMethod(ChooseHashFunction, "for a dual semigroup element and int",
|
|
202
|
+
[IsDualSemigroupElement, IsInt],
|
|
203
|
+
function(x, data)
|
|
204
|
+
local H, hashfunc;
|
|
205
|
+
|
|
206
|
+
H := ChooseHashFunction(x![1], data);
|
|
207
|
+
hashfunc := {a, b} -> H.func(a![1], b);
|
|
208
|
+
return rec(func := hashfunc, data := H.data);
|
|
209
|
+
end);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
############################################################################
|
|
2
|
+
##
|
|
3
|
+
## attributes/factor.gd
|
|
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
|
+
DeclareOperation("MinimalFactorization",
|
|
12
|
+
[IsSemigroup, IsMultiplicativeElement]);
|
|
13
|
+
DeclareOperation("NonTrivialFactorization",
|
|
14
|
+
[IsSemigroup, IsMultiplicativeElement]);
|
|
15
|
+
DeclareOperation("Factorization", [IsLambdaOrb, IsPosInt, IsPerm]);
|
|
16
|
+
DeclareOperation("Factorization", [IsSemigroup, IsMultiplicativeElement]);
|
|
17
|
+
DeclareOperation("TraceSchreierTreeForward", [IsSemigroupData, IsPosInt]);
|
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## attributes/factor.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
|
+
# This file contains methods relating to factorising elements of a semigroup
|
|
12
|
+
# over its generators.
|
|
13
|
+
|
|
14
|
+
# this is declared in the library, but there is no method for semigroups in the
|
|
15
|
+
# library.
|
|
16
|
+
|
|
17
|
+
InstallMethod(Factorization,
|
|
18
|
+
"for semigroup with CanUseFroidurePin and multiplicative element",
|
|
19
|
+
[IsSemigroup and CanUseFroidurePin, IsMultiplicativeElement],
|
|
20
|
+
MinimalFactorization);
|
|
21
|
+
|
|
22
|
+
InstallMethod(NonTrivialFactorization,
|
|
23
|
+
"for semigroup with CanUseFroidurePin and multiplicative element",
|
|
24
|
+
[IsSemigroup and CanUseFroidurePin, IsMultiplicativeElement],
|
|
25
|
+
function(S, x)
|
|
26
|
+
local gens, pos, gr, verts, i, j, y;
|
|
27
|
+
|
|
28
|
+
if not x in S then
|
|
29
|
+
ErrorNoReturn("the 2nd argument (a mult. elt.) must belong to the ",
|
|
30
|
+
"1st argument (a semigroup)");
|
|
31
|
+
elif HasIndecomposableElements(S)
|
|
32
|
+
and x in IndecomposableElements(S) then
|
|
33
|
+
return fail;
|
|
34
|
+
fi;
|
|
35
|
+
|
|
36
|
+
# if <x> is not a generator of <S>, then any factorization is non-trivial
|
|
37
|
+
gens := GeneratorsOfSemigroup(S);
|
|
38
|
+
pos := Position(gens, x);
|
|
39
|
+
if pos = fail then
|
|
40
|
+
return Factorization(S, x);
|
|
41
|
+
elif IsIdempotent(x) then
|
|
42
|
+
return [pos, pos];
|
|
43
|
+
fi;
|
|
44
|
+
|
|
45
|
+
pos := PositionCanonical(S, x);
|
|
46
|
+
gr := RightCayleyDigraph(S);
|
|
47
|
+
verts := InNeighboursOfVertex(gr, pos);
|
|
48
|
+
if IsEmpty(verts) then
|
|
49
|
+
return fail;
|
|
50
|
+
fi;
|
|
51
|
+
i := verts[1];
|
|
52
|
+
j := Position(OutNeighboursOfVertex(gr, i), pos);
|
|
53
|
+
y := EnumeratorCanonical(S)[i];
|
|
54
|
+
return Concatenation(MinimalFactorization(S, y), [j]);
|
|
55
|
+
end);
|
|
56
|
+
|
|
57
|
+
InstallMethod(NonTrivialFactorization,
|
|
58
|
+
"for an acting semigroup with generators and multiplicative element",
|
|
59
|
+
[IsActingSemigroup and HasGeneratorsOfSemigroup, IsMultiplicativeElement],
|
|
60
|
+
function(S, x)
|
|
61
|
+
local factorization, id, gens, data, pos, graph, j, i;
|
|
62
|
+
|
|
63
|
+
if not x in S then
|
|
64
|
+
ErrorNoReturn("the 2nd argument (a mult. elt.) must belong to the ",
|
|
65
|
+
"1st argument (a semigroup)");
|
|
66
|
+
elif HasIndecomposableElements(S)
|
|
67
|
+
and x in IndecomposableElements(S) then
|
|
68
|
+
return fail;
|
|
69
|
+
fi;
|
|
70
|
+
|
|
71
|
+
factorization := Factorization(S, x);
|
|
72
|
+
if not IsTrivial(factorization) then
|
|
73
|
+
return factorization;
|
|
74
|
+
fi;
|
|
75
|
+
|
|
76
|
+
# Attempt to find a right identity for x.
|
|
77
|
+
id := RightIdentity(S, x);
|
|
78
|
+
if id <> fail then
|
|
79
|
+
return Concatenation(factorization, Factorization(S, id));
|
|
80
|
+
fi;
|
|
81
|
+
|
|
82
|
+
# {x} is a non-reg trivial R-class.
|
|
83
|
+
Assert(1, IsTrivial(RClass(S, x)) and not IsRegularGreensClass(RClass(S, x)));
|
|
84
|
+
|
|
85
|
+
# Attempt to find a left identity for x.
|
|
86
|
+
id := LeftIdentity(S, x);
|
|
87
|
+
if id <> fail then
|
|
88
|
+
return Concatenation(Factorization(S, id), factorization);
|
|
89
|
+
fi;
|
|
90
|
+
|
|
91
|
+
# {x} is a non-reg trivial D-class. Either {x} is maximal or <x> is redundant.
|
|
92
|
+
Assert(1, IsTrivial(DClass(S, x)) and not IsRegularDClass(DClass(S, x)));
|
|
93
|
+
|
|
94
|
+
# If <x> is redundant, we can decompose <x> as a left multiple of some other
|
|
95
|
+
# R-class rep of the semigroup
|
|
96
|
+
gens := GeneratorsOfSemigroup(S);
|
|
97
|
+
data := SemigroupData(S);
|
|
98
|
+
Enumerate(data);
|
|
99
|
+
pos := Position(data, x);
|
|
100
|
+
graph := OrbitGraph(data);
|
|
101
|
+
for j in [2 .. Length(data)] do
|
|
102
|
+
for i in [1 .. Length(gens)] do
|
|
103
|
+
if graph[j][i] = pos then
|
|
104
|
+
# x = gens[i] * RClassReps(S)[j - 1].
|
|
105
|
+
return Concatenation([i], Factorization(S, data[j][4]));
|
|
106
|
+
fi;
|
|
107
|
+
od;
|
|
108
|
+
od;
|
|
109
|
+
|
|
110
|
+
# {x} is a maximal D-class and is therefore an indecomposable element.
|
|
111
|
+
return fail;
|
|
112
|
+
end);
|
|
113
|
+
|
|
114
|
+
InstallMethod(NonTrivialFactorization,
|
|
115
|
+
"for an acting inverse semigroup rep with generators and element",
|
|
116
|
+
[IsInverseActingSemigroupRep and HasGeneratorsOfSemigroup,
|
|
117
|
+
IsMultiplicativeElement],
|
|
118
|
+
function(S, x)
|
|
119
|
+
local pos;
|
|
120
|
+
|
|
121
|
+
if not x in S then
|
|
122
|
+
ErrorNoReturn("the 2nd argument (a mult. elt.) must belong to the ",
|
|
123
|
+
"1st argument (a semigroup)");
|
|
124
|
+
fi;
|
|
125
|
+
pos := Position(GeneratorsOfSemigroup(S), x);
|
|
126
|
+
if pos = fail then
|
|
127
|
+
return Factorization(S, x);
|
|
128
|
+
fi;
|
|
129
|
+
return [pos, -pos, pos];
|
|
130
|
+
end);
|
|
131
|
+
|
|
132
|
+
# factorisation of Schutzenberger group element, the same method works for
|
|
133
|
+
# ideals
|
|
134
|
+
|
|
135
|
+
InstallMethod(Factorization, "for a lambda orbit, scc index, and perm",
|
|
136
|
+
[IsLambdaOrb, IsPosInt, IsPerm],
|
|
137
|
+
function(o, m, p)
|
|
138
|
+
local gens, scc, lookup, orbitgraph, genstoapply, lambdaperm, rep, bound, G,
|
|
139
|
+
factors, nr, stop, uword, u, adj, vword, v, x, iso, word, epi, out, k, l, i;
|
|
140
|
+
|
|
141
|
+
if not IsBound(o!.factors) then
|
|
142
|
+
o!.factors := [];
|
|
143
|
+
o!.factorgroups := [];
|
|
144
|
+
fi;
|
|
145
|
+
|
|
146
|
+
if not IsBound(o!.factors[m]) then
|
|
147
|
+
gens := o!.gens;
|
|
148
|
+
scc := OrbSCC(o)[m];
|
|
149
|
+
lookup := o!.scc_lookup;
|
|
150
|
+
orbitgraph := OrbitGraph(o);
|
|
151
|
+
genstoapply := [1 .. Length(gens)];
|
|
152
|
+
lambdaperm := LambdaPerm(o!.parent);
|
|
153
|
+
rep := LambdaOrbRep(o, m);
|
|
154
|
+
bound := Size(LambdaOrbSchutzGp(o, m));
|
|
155
|
+
|
|
156
|
+
G := Group(());
|
|
157
|
+
factors := [];
|
|
158
|
+
nr := 0;
|
|
159
|
+
stop := false;
|
|
160
|
+
|
|
161
|
+
for k in scc do
|
|
162
|
+
uword := TraceSchreierTreeOfSCCForward(o, m, k);
|
|
163
|
+
u := EvaluateWord(o, uword);
|
|
164
|
+
adj := orbitgraph[k];
|
|
165
|
+
|
|
166
|
+
for l in genstoapply do
|
|
167
|
+
if IsBound(adj[l]) and lookup[adj[l]] = m then
|
|
168
|
+
vword := TraceSchreierTreeOfSCCBack(o, m, adj[l]);
|
|
169
|
+
v := EvaluateWord(o, vword);
|
|
170
|
+
x := lambdaperm(rep, rep * u * gens[l] * v);
|
|
171
|
+
if bound = 1 or not x in G then
|
|
172
|
+
G := ClosureGroup(G, x);
|
|
173
|
+
nr := nr + 1;
|
|
174
|
+
factors[nr] := Concatenation(uword, [l], vword);
|
|
175
|
+
if Size(G) = bound then
|
|
176
|
+
stop := true;
|
|
177
|
+
break;
|
|
178
|
+
fi;
|
|
179
|
+
fi;
|
|
180
|
+
fi;
|
|
181
|
+
od;
|
|
182
|
+
if stop then
|
|
183
|
+
break;
|
|
184
|
+
fi;
|
|
185
|
+
od;
|
|
186
|
+
o!.factors[m] := factors;
|
|
187
|
+
o!.factorgroups[m] := G;
|
|
188
|
+
else
|
|
189
|
+
factors := o!.factors[m];
|
|
190
|
+
G := o!.factorgroups[m];
|
|
191
|
+
fi;
|
|
192
|
+
|
|
193
|
+
if not p in G then
|
|
194
|
+
ErrorNoReturn("the 3rd argument <p> does not belong to the ",
|
|
195
|
+
"Schutzenberger group");
|
|
196
|
+
elif IsEmpty(factors) then
|
|
197
|
+
# No elt of the semigroup stabilizes the relevant lambda value. Therefore
|
|
198
|
+
# the Schutzenberger group is trivial, and corresponds to the action of an
|
|
199
|
+
# adjoined identity. No element of the semigroup acts like <p> = ().
|
|
200
|
+
return fail;
|
|
201
|
+
fi;
|
|
202
|
+
|
|
203
|
+
# express <elt> as a word in the generators of the Schutzenberger group
|
|
204
|
+
if (not IsInverseActingSemigroupRep(o!.parent)) and Size(G) <= 1024 then
|
|
205
|
+
iso := IsomorphismTransformationSemigroup(G);
|
|
206
|
+
word := MinimalFactorization(Range(iso), p ^ iso);
|
|
207
|
+
else
|
|
208
|
+
# Note that in this case the word potentially contains inverses of
|
|
209
|
+
# generators and we do not have a good way, in general, of finding words in
|
|
210
|
+
# the original generators of the semigroup that equal the inverse of a
|
|
211
|
+
# generator of the Schutzenberger group.
|
|
212
|
+
if p = () then
|
|
213
|
+
# When p = (), LetterRepAssocWord gives the empty word. The case p = () is
|
|
214
|
+
# only used by NonTrivialFactorization, which requires a non-empty word.
|
|
215
|
+
# Return [k, -k] (i.e. kk^-1), where k is gen with smallest order in G.
|
|
216
|
+
v := infinity;
|
|
217
|
+
for i in [1 .. Length(GeneratorsOfGroup(G))] do
|
|
218
|
+
x := Order(G.(i));
|
|
219
|
+
if x < v then
|
|
220
|
+
k := i;
|
|
221
|
+
v := x;
|
|
222
|
+
fi;
|
|
223
|
+
od;
|
|
224
|
+
word := [k, -k];
|
|
225
|
+
else
|
|
226
|
+
epi := EpimorphismFromFreeGroup(G);
|
|
227
|
+
word := LetterRepAssocWord(PreImagesRepresentativeNC(epi, p));
|
|
228
|
+
fi;
|
|
229
|
+
fi;
|
|
230
|
+
|
|
231
|
+
# convert group generators to semigroup generators
|
|
232
|
+
out := [];
|
|
233
|
+
for i in word do
|
|
234
|
+
if i > 0 then
|
|
235
|
+
Append(out, factors[i]);
|
|
236
|
+
elif IsInverseActingSemigroupRep(o!.parent) then
|
|
237
|
+
Append(out, Reversed(factors[-i]) * -1);
|
|
238
|
+
else
|
|
239
|
+
Append(out, Concatenation(List([1 .. Order(G.(-i)) - 1],
|
|
240
|
+
x -> factors[-i])));
|
|
241
|
+
fi;
|
|
242
|
+
od;
|
|
243
|
+
return out;
|
|
244
|
+
end);
|
|
245
|
+
|
|
246
|
+
# returns a word in the generators of the parent of <data> equal to the R-class
|
|
247
|
+
# representative stored in <data!.orbit[pos]>.
|
|
248
|
+
|
|
249
|
+
# Notes: the code is more complicated than you might think since the R-class
|
|
250
|
+
# reps are obtained from earlier reps by left multiplication but the orbit
|
|
251
|
+
# multipliers correspond to right multiplication.
|
|
252
|
+
|
|
253
|
+
# This method does not work for ideals!
|
|
254
|
+
|
|
255
|
+
InstallMethod(TraceSchreierTreeForward, "for semigroup data and pos int",
|
|
256
|
+
[IsSemigroupData, IsPosInt],
|
|
257
|
+
function(data, pos)
|
|
258
|
+
local word1, word2, schreiergen, schreierpos, schreiermult, orb;
|
|
259
|
+
|
|
260
|
+
word1 := []; # the word obtained by tracing schreierpos and schreiergen
|
|
261
|
+
# (left multiplication)
|
|
262
|
+
word2 := []; # the word corresponding to multipliers applied (if any)
|
|
263
|
+
# (right multiplication)
|
|
264
|
+
|
|
265
|
+
schreiergen := data!.schreiergen;
|
|
266
|
+
schreierpos := data!.schreierpos;
|
|
267
|
+
schreiermult := data!.schreiermult;
|
|
268
|
+
|
|
269
|
+
orb := data!.orbit;
|
|
270
|
+
|
|
271
|
+
while pos > 1 do
|
|
272
|
+
Add(word1, schreiergen[pos]);
|
|
273
|
+
Append(word2,
|
|
274
|
+
Reversed(TraceSchreierTreeOfSCCBack(orb[pos][3],
|
|
275
|
+
orb[pos][2],
|
|
276
|
+
schreiermult[pos])));
|
|
277
|
+
pos := schreierpos[pos];
|
|
278
|
+
od;
|
|
279
|
+
|
|
280
|
+
Append(word1, Reversed(word2));
|
|
281
|
+
return word1;
|
|
282
|
+
end);
|
|
283
|
+
|
|
284
|
+
InstallMethod(Factorization,
|
|
285
|
+
"for an acting semigroup with generators and element",
|
|
286
|
+
[IsActingSemigroup and HasGeneratorsOfSemigroup, IsMultiplicativeElement],
|
|
287
|
+
function(S, x)
|
|
288
|
+
local pos, o, l, m, scc, data, rep, word1, word2, p;
|
|
289
|
+
|
|
290
|
+
if not x in S then
|
|
291
|
+
ErrorNoReturn("the 2nd argument (a mult. elt.) must belong to the ",
|
|
292
|
+
"1st argument (a semigroup)");
|
|
293
|
+
else
|
|
294
|
+
pos := Position(S, x); # position in the current data structure if any
|
|
295
|
+
if pos <> fail then
|
|
296
|
+
return MinimalFactorization(S, x);
|
|
297
|
+
fi;
|
|
298
|
+
fi;
|
|
299
|
+
|
|
300
|
+
o := Enumerate(LambdaOrb(S));
|
|
301
|
+
l := Position(o, LambdaFunc(S)(x));
|
|
302
|
+
m := OrbSCCLookup(o)[l];
|
|
303
|
+
scc := OrbSCC(o)[m];
|
|
304
|
+
|
|
305
|
+
data := SemigroupData(S);
|
|
306
|
+
pos := Position(data, x); # Not <fail> since <f> in <s>
|
|
307
|
+
rep := data[pos][4]; # rep of R-class of <f>
|
|
308
|
+
|
|
309
|
+
word1 := TraceSchreierTreeForward(data, pos); # A word equal to <rep>
|
|
310
|
+
|
|
311
|
+
# Compensate for the action of the multipliers, if necessary
|
|
312
|
+
if l <> scc[1] then
|
|
313
|
+
word2 := TraceSchreierTreeOfSCCForward(o, m, l);
|
|
314
|
+
p := LambdaPerm(S)(rep, x *
|
|
315
|
+
LambdaInverse(S)(o[scc[1]],
|
|
316
|
+
EvaluateWord(o!.gens, word2)));
|
|
317
|
+
else
|
|
318
|
+
word2 := [];
|
|
319
|
+
p := LambdaPerm(S)(rep, x);
|
|
320
|
+
fi;
|
|
321
|
+
|
|
322
|
+
if IsOne(p) then
|
|
323
|
+
# No need to factorise <p>
|
|
324
|
+
Append(word1, word2);
|
|
325
|
+
return word1;
|
|
326
|
+
fi;
|
|
327
|
+
|
|
328
|
+
# factorize the group element <p> over the generators of <s>
|
|
329
|
+
Append(word1, Factorization(o, m, p));
|
|
330
|
+
Append(word1, word2);
|
|
331
|
+
|
|
332
|
+
return word1;
|
|
333
|
+
end);
|
|
334
|
+
|
|
335
|
+
InstallMethod(Factorization,
|
|
336
|
+
"for an acting inverse semigroup rep with generators and element",
|
|
337
|
+
IsCollsElms,
|
|
338
|
+
[IsInverseActingSemigroupRep and HasGeneratorsOfSemigroup,
|
|
339
|
+
IsMultiplicativeElement],
|
|
340
|
+
function(S, x)
|
|
341
|
+
local pos, o, gens, l, m, scc, word1, k, rep, word2, p;
|
|
342
|
+
|
|
343
|
+
if not x in S then
|
|
344
|
+
ErrorNoReturn("the 2nd argument (a mult. elt.) must belong to the ",
|
|
345
|
+
"1st argument (a semigroup)");
|
|
346
|
+
else
|
|
347
|
+
pos := Position(S, x); # position in the current data structure if any
|
|
348
|
+
if pos <> fail then
|
|
349
|
+
return MinimalFactorization(S, x);
|
|
350
|
+
fi;
|
|
351
|
+
fi;
|
|
352
|
+
|
|
353
|
+
o := LambdaOrb(S);
|
|
354
|
+
gens := o!.gens;
|
|
355
|
+
l := Position(o, LambdaFunc(S)(x));
|
|
356
|
+
m := OrbSCCLookup(o)[l];
|
|
357
|
+
scc := OrbSCC(o)[m];
|
|
358
|
+
|
|
359
|
+
# find the R-class rep
|
|
360
|
+
word1 := TraceSchreierTreeForward(o, scc[1]);
|
|
361
|
+
# lambda value is ok, but rho value is wrong
|
|
362
|
+
k := Position(o, RhoFunc(S)(EvaluateWord(gens, word1)));
|
|
363
|
+
# take rho value of <word1> back to 1st position in scc
|
|
364
|
+
word1 := Concatenation(TraceSchreierTreeOfSCCForward(o, m, k), word1);
|
|
365
|
+
|
|
366
|
+
# take rho value of <word1> forwards to rho value of <f>
|
|
367
|
+
k := Position(o, RhoFunc(S)(x));
|
|
368
|
+
word1 := Concatenation(TraceSchreierTreeOfSCCBack(o, m, k), word1);
|
|
369
|
+
# <rep> is an R-class rep for the R-class of <f>
|
|
370
|
+
rep := EvaluateWord(gens, word1);
|
|
371
|
+
|
|
372
|
+
# compensate for the action of the multipliers
|
|
373
|
+
if l <> scc[1] then
|
|
374
|
+
word2 := TraceSchreierTreeOfSCCForward(o, m, l);
|
|
375
|
+
p := LambdaPerm(S)(rep, x *
|
|
376
|
+
LambdaInverse(S)(o[scc[1]], EvaluateWord(gens, word2)));
|
|
377
|
+
else
|
|
378
|
+
word2 := [];
|
|
379
|
+
p := LambdaPerm(S)(rep, x);
|
|
380
|
+
fi;
|
|
381
|
+
|
|
382
|
+
if IsOne(p) then
|
|
383
|
+
Append(word1, word2);
|
|
384
|
+
return word1;
|
|
385
|
+
fi;
|
|
386
|
+
|
|
387
|
+
# factorize the group element <p> over the generators of <s>
|
|
388
|
+
Append(word1, Factorization(o, m, p));
|
|
389
|
+
Append(word1, word2);
|
|
390
|
+
|
|
391
|
+
return word1;
|
|
392
|
+
end);
|
|
393
|
+
|
|
394
|
+
InstallMethod(Factorization,
|
|
395
|
+
"for a regular acting semigroup with generators and element",
|
|
396
|
+
[IsActingSemigroup and IsRegularSemigroup and HasGeneratorsOfSemigroup,
|
|
397
|
+
IsMultiplicativeElement],
|
|
398
|
+
function(S, x)
|
|
399
|
+
local pos, o, gens, l, word1, rep, m, scc, k, word2, p;
|
|
400
|
+
|
|
401
|
+
if not x in S then
|
|
402
|
+
ErrorNoReturn("the 2nd argument (a mult. elt.) must belong to the ",
|
|
403
|
+
"1st argument (a semigroup)");
|
|
404
|
+
else
|
|
405
|
+
pos := Position(S, x); # position in the current data structure if any
|
|
406
|
+
if pos <> fail then
|
|
407
|
+
return MinimalFactorization(S, x);
|
|
408
|
+
fi;
|
|
409
|
+
fi;
|
|
410
|
+
|
|
411
|
+
o := RhoOrb(S);
|
|
412
|
+
Enumerate(o);
|
|
413
|
+
gens := o!.gens;
|
|
414
|
+
l := Position(o, RhoFunc(S)(x));
|
|
415
|
+
|
|
416
|
+
# find the R-class rep
|
|
417
|
+
word1 := TraceSchreierTreeBack(o, l);
|
|
418
|
+
# rho value is ok but lambda value is wrong
|
|
419
|
+
# trace back to get forward since this is a left orbit
|
|
420
|
+
rep := EvaluateWord(gens, word1);
|
|
421
|
+
|
|
422
|
+
o := LambdaOrb(S);
|
|
423
|
+
Enumerate(o);
|
|
424
|
+
l := Position(o, LambdaFunc(S)(x));
|
|
425
|
+
m := OrbSCCLookup(o)[l];
|
|
426
|
+
scc := OrbSCC(o)[m];
|
|
427
|
+
|
|
428
|
+
k := Position(o, LambdaFunc(S)(rep));
|
|
429
|
+
word2 := TraceSchreierTreeOfSCCBack(o, m, k);
|
|
430
|
+
rep := rep * EvaluateWord(gens, word2); # the R-class rep of the R-class of f
|
|
431
|
+
Append(word1, word2); # and this word equals rep
|
|
432
|
+
|
|
433
|
+
# compensate for the action of the multipliers
|
|
434
|
+
if l <> scc[1] then
|
|
435
|
+
word2 := TraceSchreierTreeOfSCCForward(o, m, l);
|
|
436
|
+
p := LambdaPerm(S)(rep, x *
|
|
437
|
+
LambdaInverse(S)(o[scc[1]], EvaluateWord(gens, word2)));
|
|
438
|
+
else
|
|
439
|
+
word2 := [];
|
|
440
|
+
p := LambdaPerm(S)(rep, x);
|
|
441
|
+
fi;
|
|
442
|
+
|
|
443
|
+
if IsOne(p) then
|
|
444
|
+
Append(word1, word2);
|
|
445
|
+
return word1;
|
|
446
|
+
fi;
|
|
447
|
+
|
|
448
|
+
# factorize the group element <p> over the generators of <s>
|
|
449
|
+
Append(word1, Factorization(o, m, p));
|
|
450
|
+
Append(word1, word2);
|
|
451
|
+
|
|
452
|
+
return word1;
|
|
453
|
+
end);
|