passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-macosx_14_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-gap-pkg-semigroups might be problematic. Click here for more details.
- gap/pkg/semigroups/CHANGELOG.md +1699 -0
- gap/pkg/semigroups/CONTRIBUTING.md +91 -0
- gap/pkg/semigroups/GNUmakefile +110 -0
- gap/pkg/semigroups/GNUmakefile.in +110 -0
- gap/pkg/semigroups/GPL +674 -0
- gap/pkg/semigroups/LICENSE +16 -0
- gap/pkg/semigroups/Makefile +26 -0
- gap/pkg/semigroups/Makefile.gappkg +225 -0
- gap/pkg/semigroups/PackageInfo.g +529 -0
- gap/pkg/semigroups/README.md +102 -0
- gap/pkg/semigroups/VERSIONS +112 -0
- gap/pkg/semigroups/aclocal.m4 +375 -0
- gap/pkg/semigroups/autogen.sh +25 -0
- gap/pkg/semigroups/bin/aarch64-apple-darwin23-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1157 -0
- gap/pkg/semigroups/config.status +1132 -0
- gap/pkg/semigroups/config.sub +1960 -0
- gap/pkg/semigroups/configure +9742 -0
- gap/pkg/semigroups/configure.ac +71 -0
- gap/pkg/semigroups/data/doc/greens.pickle +1 -0
- gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
- gap/pkg/semigroups/data/tst/bipart4 +10 -0
- gap/pkg/semigroups/data/tst/pperm10 +1 -0
- gap/pkg/semigroups/data/tst/tables.gz +0 -0
- gap/pkg/semigroups/data/tst/testdata +1 -0
- gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
- gap/pkg/semigroups/data/tst/trans3 +7 -0
- gap/pkg/semigroups/data/tst/trans3-old +7 -0
- gap/pkg/semigroups/environment.yml +7 -0
- gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
- gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
- gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
- gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
- gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
- gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
- gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
- gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
- gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
- gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
- gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
- gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
- gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
- gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
- gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
- gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
- gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
- gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
- gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
- gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
- gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
- gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
- gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
- gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
- gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
- gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
- gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
- gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
- gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
- gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
- gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
- gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
- gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
- gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
- gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
- gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
- gap/pkg/semigroups/gap/elements/elements.gd +11 -0
- gap/pkg/semigroups/gap/elements/elements.gi +121 -0
- gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
- gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
- gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
- gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
- gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
- gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
- gap/pkg/semigroups/gap/elements/star.gd +21 -0
- gap/pkg/semigroups/gap/elements/star.gi +21 -0
- gap/pkg/semigroups/gap/elements/trans.gd +13 -0
- gap/pkg/semigroups/gap/elements/trans.gi +50 -0
- gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
- gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
- gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
- gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
- gap/pkg/semigroups/gap/fp/word.gd +15 -0
- gap/pkg/semigroups/gap/fp/word.gi +67 -0
- gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
- gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
- gap/pkg/semigroups/gap/greens/acting.gd +81 -0
- gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
- gap/pkg/semigroups/gap/greens/generic.gd +117 -0
- gap/pkg/semigroups/gap/greens/generic.gi +630 -0
- gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
- gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
- gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
- gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
- gap/pkg/semigroups/gap/main/acting.gd +36 -0
- gap/pkg/semigroups/gap/main/acting.gi +779 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
- gap/pkg/semigroups/gap/main/graded.gd +26 -0
- gap/pkg/semigroups/gap/main/graded.gi +355 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
- gap/pkg/semigroups/gap/main/orbits.gd +24 -0
- gap/pkg/semigroups/gap/main/orbits.gi +512 -0
- gap/pkg/semigroups/gap/main/semiact.gd +20 -0
- gap/pkg/semigroups/gap/main/semiact.gi +821 -0
- gap/pkg/semigroups/gap/main/setup.gd +61 -0
- gap/pkg/semigroups/gap/main/setup.gi +1094 -0
- gap/pkg/semigroups/gap/obsolete.gd +9 -0
- gap/pkg/semigroups/gap/obsolete.gi +14 -0
- gap/pkg/semigroups/gap/options.g +55 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
- gap/pkg/semigroups/gap/tools/display.gd +24 -0
- gap/pkg/semigroups/gap/tools/display.gi +749 -0
- gap/pkg/semigroups/gap/tools/io.gd +17 -0
- gap/pkg/semigroups/gap/tools/io.gi +543 -0
- gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
- gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
- gap/pkg/semigroups/gap/tools/utils.gd +19 -0
- gap/pkg/semigroups/gap/tools/utils.gi +756 -0
- gap/pkg/semigroups/gapbind14/.ccls +18 -0
- gap/pkg/semigroups/gapbind14/.clang-format +104 -0
- gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
- gap/pkg/semigroups/gapbind14/LICENSE +674 -0
- gap/pkg/semigroups/gapbind14/README.md +76 -0
- gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
- gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
- gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
- gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
- gap/pkg/semigroups/gapbind14/demo/configure +34 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
- gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
- gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
- gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
- gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
- gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
- gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
- gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
- gap/pkg/semigroups/init.g +150 -0
- gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
- gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
- gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
- gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
- gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
- gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
- gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
- gap/pkg/semigroups/m4/find_gap.m4 +94 -0
- gap/pkg/semigroups/makedoc.g +153 -0
- gap/pkg/semigroups/prerequisites.sh +62 -0
- gap/pkg/semigroups/read.g +105 -0
- gap/pkg/semigroups/release.toml +6 -0
- gap/pkg/semigroups/tst/extreme/README +2 -0
- gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
- gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
- gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
- gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
- gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
- gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
- gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
- gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
- gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
- gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
- gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
- gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
- gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
- gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
- gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
- gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
- gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
- gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
- gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
- gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
- gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
- gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
- gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
- gap/pkg/semigroups/tst/standard/README +2 -0
- gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
- gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
- gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
- gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
- gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
- gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
- gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
- gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
- gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
- gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
- gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
- gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
- gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
- gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
- gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
- gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
- gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
- gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
- gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
- gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
- gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
- gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
- gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
- gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
- gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
- gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
- gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
- gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
- gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
- gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
- gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
- gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
- gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
- gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
- gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
- gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
- gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
- gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
- gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
- gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
- gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
- gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
- gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
- gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
- gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
- gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
- gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
- gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
- gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
- gap/pkg/semigroups/tst/standard/options.tst +54 -0
- gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
- gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
- gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
- gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
- gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
- gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
- gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
- gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
- gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
- gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
- gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
- gap/pkg/semigroups/tst/testinstall.tst +1815 -0
- gap/pkg/semigroups/tst/teststandard.g +22 -0
- gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
- gap/pkg/semigroups/tst/workspaces/load.g +11 -0
- gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
- gap/pkg/semigroups/tst/workspaces/save.g +14 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA +93 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +354 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +6 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
- passagemath_gap_pkg_semigroups.dylibs/libsemigroups.2.dylib +0 -0
- sage/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/gap_pkg_semigroups.abi3.so +0 -0
|
@@ -0,0 +1,711 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## semigroups/semipperm.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 for every operation/attribute/property that is
|
|
12
|
+
# specific to semigroups of partial perms.
|
|
13
|
+
|
|
14
|
+
#############################################################################
|
|
15
|
+
## Random
|
|
16
|
+
#############################################################################
|
|
17
|
+
|
|
18
|
+
InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
|
|
19
|
+
[IsPartialPermSemigroup, IsList],
|
|
20
|
+
{filt, params} -> SEMIGROUPS_ProcessRandomArgsCons(IsSemigroup, params));
|
|
21
|
+
|
|
22
|
+
InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
|
|
23
|
+
[IsPartialPermMonoid, IsList],
|
|
24
|
+
{filt, params} -> SEMIGROUPS_ProcessRandomArgsCons(IsSemigroup, params));
|
|
25
|
+
|
|
26
|
+
InstallMethod(RandomSemigroupCons, "for IsPartialPermSemigroup and a list",
|
|
27
|
+
[IsPartialPermSemigroup, IsList], {filt, params} ->
|
|
28
|
+
Semigroup(List([1 .. params[1]], i -> RandomPartialPerm(params[2]))));
|
|
29
|
+
|
|
30
|
+
InstallMethod(RandomMonoidCons, "for IsPartialPermMonoid and a list",
|
|
31
|
+
[IsPartialPermMonoid, IsList], {filt, params} ->
|
|
32
|
+
Monoid(List([1 .. params[1]], i -> RandomPartialPerm(params[2]))));
|
|
33
|
+
|
|
34
|
+
InstallMethod(RandomInverseSemigroupCons,
|
|
35
|
+
"for IsPartialPermSemigroup and a list",
|
|
36
|
+
[IsPartialPermSemigroup, IsList],
|
|
37
|
+
function(_, params)
|
|
38
|
+
return InverseSemigroup(List([1 .. params[1]],
|
|
39
|
+
i -> RandomPartialPerm(params[2])));
|
|
40
|
+
end);
|
|
41
|
+
|
|
42
|
+
InstallMethod(RandomInverseMonoidCons,
|
|
43
|
+
"for IsPartialPermMonoid and a list",
|
|
44
|
+
[IsPartialPermMonoid, IsList],
|
|
45
|
+
function(_, params)
|
|
46
|
+
return InverseMonoid(List([1 .. params[1]],
|
|
47
|
+
i -> RandomPartialPerm(params[2])));
|
|
48
|
+
end);
|
|
49
|
+
|
|
50
|
+
#############################################################################
|
|
51
|
+
## Operators
|
|
52
|
+
#############################################################################
|
|
53
|
+
|
|
54
|
+
InstallMethod(\<, "for partial perm semigroups",
|
|
55
|
+
[IsPartialPermSemigroup, IsPartialPermSemigroup],
|
|
56
|
+
function(S, T)
|
|
57
|
+
if DegreeOfPartialPermSemigroup(S)
|
|
58
|
+
<> DegreeOfPartialPermSemigroup(T)
|
|
59
|
+
or CodegreeOfPartialPermSemigroup(S)
|
|
60
|
+
<> CodegreeOfPartialPermSemigroup(T) then
|
|
61
|
+
return DegreeOfPartialPermSemigroup(S)
|
|
62
|
+
< DegreeOfPartialPermSemigroup(T) or
|
|
63
|
+
(DegreeOfPartialPermSemigroup(S)
|
|
64
|
+
= DegreeOfPartialPermSemigroup(T)
|
|
65
|
+
and CodegreeOfPartialPermSemigroup(S)
|
|
66
|
+
< CodegreeOfPartialPermSemigroup(T));
|
|
67
|
+
fi;
|
|
68
|
+
TryNextMethod();
|
|
69
|
+
end);
|
|
70
|
+
|
|
71
|
+
#############################################################################
|
|
72
|
+
## Isomorphisms
|
|
73
|
+
#############################################################################
|
|
74
|
+
|
|
75
|
+
InstallMethod(IsomorphismSemigroup,
|
|
76
|
+
"for IsPartialPermSemigroup and a semigroup",
|
|
77
|
+
[IsPartialPermSemigroup, IsSemigroup],
|
|
78
|
+
{filt, S} -> IsomorphismPartialPermSemigroup(S));
|
|
79
|
+
|
|
80
|
+
InstallMethod(IsomorphismMonoid,
|
|
81
|
+
"for IsPartialPermMonoid and a semigroup",
|
|
82
|
+
[IsPartialPermMonoid, IsSemigroup],
|
|
83
|
+
{filt, S} -> IsomorphismPartialPermMonoid(S));
|
|
84
|
+
|
|
85
|
+
InstallMethod(IsomorphismPartialPermSemigroup,
|
|
86
|
+
"for a bipartition semigroup with generators",
|
|
87
|
+
[IsBipartitionSemigroup and HasGeneratorsOfSemigroup],
|
|
88
|
+
function(S)
|
|
89
|
+
local T, n;
|
|
90
|
+
|
|
91
|
+
if not ForAll(GeneratorsOfSemigroup(S), IsPartialPermBipartition) then
|
|
92
|
+
TryNextMethod();
|
|
93
|
+
fi;
|
|
94
|
+
|
|
95
|
+
T := Semigroup(List(GeneratorsOfSemigroup(S), AsPartialPerm));
|
|
96
|
+
UseIsomorphismRelation(S, T);
|
|
97
|
+
n := DegreeOfBipartitionSemigroup(S);
|
|
98
|
+
return SemigroupIsomorphismByFunctionNC(S,
|
|
99
|
+
T,
|
|
100
|
+
AsPartialPerm,
|
|
101
|
+
x -> AsBipartition(x, n));
|
|
102
|
+
end);
|
|
103
|
+
|
|
104
|
+
InstallMethod(IsomorphismPartialPermSemigroup,
|
|
105
|
+
"for bipartition inverse semigroup with generators",
|
|
106
|
+
[IsBipartitionSemigroup and IsInverseSemigroup and
|
|
107
|
+
HasGeneratorsOfInverseSemigroup],
|
|
108
|
+
function(S)
|
|
109
|
+
local T, n;
|
|
110
|
+
|
|
111
|
+
if not ForAll(GeneratorsOfInverseSemigroup(S),
|
|
112
|
+
IsPartialPermBipartition) then
|
|
113
|
+
TryNextMethod();
|
|
114
|
+
fi;
|
|
115
|
+
|
|
116
|
+
T := InverseSemigroup(List(GeneratorsOfInverseSemigroup(S),
|
|
117
|
+
AsPartialPerm));
|
|
118
|
+
UseIsomorphismRelation(S, T);
|
|
119
|
+
n := DegreeOfBipartitionSemigroup(S);
|
|
120
|
+
|
|
121
|
+
return SemigroupIsomorphismByFunctionNC(S,
|
|
122
|
+
T,
|
|
123
|
+
AsPartialPerm,
|
|
124
|
+
x -> AsBipartition(x, n));
|
|
125
|
+
end);
|
|
126
|
+
|
|
127
|
+
InstallMethod(IsomorphismPartialPermSemigroup, "for a semigroup ideal",
|
|
128
|
+
[IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
|
|
129
|
+
function(I)
|
|
130
|
+
local iso, inv, J;
|
|
131
|
+
|
|
132
|
+
iso := IsomorphismPartialPermSemigroup(SupersemigroupOfIdeal(I));
|
|
133
|
+
inv := InverseGeneralMapping(iso);
|
|
134
|
+
J := SemigroupIdeal(Range(iso), Images(iso, GeneratorsOfSemigroupIdeal(I)));
|
|
135
|
+
UseIsomorphismRelation(I, J);
|
|
136
|
+
|
|
137
|
+
return SemigroupIsomorphismByFunctionNC(I, J, x -> x ^ iso, x -> x ^ inv);
|
|
138
|
+
end);
|
|
139
|
+
|
|
140
|
+
InstallMethod(IsomorphismPartialPermSemigroup, "for a group as semigroup",
|
|
141
|
+
[IsGroupAsSemigroup],
|
|
142
|
+
function(G)
|
|
143
|
+
local perm_iso, perm_inv, perm_grp, pperm_iso, pperm_inv;
|
|
144
|
+
|
|
145
|
+
if IsPartialPermSemigroup(G) then
|
|
146
|
+
TryNextMethod();
|
|
147
|
+
fi;
|
|
148
|
+
|
|
149
|
+
perm_iso := IsomorphismPermGroup(G);
|
|
150
|
+
perm_inv := InverseGeneralMapping(perm_iso);
|
|
151
|
+
perm_grp := Range(perm_iso);
|
|
152
|
+
GeneratorsOfGroup(perm_grp); # to make sure that the following line calls
|
|
153
|
+
# the library method for IsPermGroup and
|
|
154
|
+
# HasGensOfGp
|
|
155
|
+
pperm_iso := IsomorphismPartialPermSemigroup(perm_grp);
|
|
156
|
+
pperm_inv := InverseGeneralMapping(pperm_iso);
|
|
157
|
+
return SemigroupIsomorphismByFunctionNC(G,
|
|
158
|
+
Range(pperm_iso),
|
|
159
|
+
x -> (x ^ perm_iso) ^ pperm_iso,
|
|
160
|
+
x -> (x ^ pperm_inv) ^ perm_inv);
|
|
161
|
+
end);
|
|
162
|
+
|
|
163
|
+
InstallMethod(IsomorphismPartialPermSemigroup,
|
|
164
|
+
"for a group with adjoined zero",
|
|
165
|
+
[IsMagmaWithZeroAdjoined and IsZeroGroup],
|
|
166
|
+
function(S)
|
|
167
|
+
local zero, inj_zm, inv_zm, grp, one, iso, inv, T, iso_pp, inv_pp;
|
|
168
|
+
|
|
169
|
+
zero := MultiplicativeZero(S);
|
|
170
|
+
inj_zm := UnderlyingInjectionZeroMagma(S);
|
|
171
|
+
inv_zm := InverseGeneralMapping(inj_zm);
|
|
172
|
+
grp := Source(inj_zm);
|
|
173
|
+
|
|
174
|
+
if IsTrivial(grp) then
|
|
175
|
+
# Special case: if <grp> is trivial, then `IsomorphismPartialPermSemigroup`
|
|
176
|
+
# will map to <{EmptyPartialPerm}>, to which we can't easily adjoin a zero.
|
|
177
|
+
one := MultiplicativeNeutralElement(S); # S = {zero, one}
|
|
178
|
+
iso := function(x)
|
|
179
|
+
if x = zero then
|
|
180
|
+
return EmptyPartialPerm();
|
|
181
|
+
fi;
|
|
182
|
+
return PartialPerm([1]);
|
|
183
|
+
end;
|
|
184
|
+
inv := function(x)
|
|
185
|
+
if DegreeOfPartialPerm(x) = 0 then
|
|
186
|
+
return zero;
|
|
187
|
+
fi;
|
|
188
|
+
return one;
|
|
189
|
+
end;
|
|
190
|
+
T := SymmetricInverseSemigroup(1);
|
|
191
|
+
return SemigroupIsomorphismByFunctionNC(S, T, iso, inv);
|
|
192
|
+
fi;
|
|
193
|
+
|
|
194
|
+
iso_pp := IsomorphismPartialPermSemigroup(grp);
|
|
195
|
+
inv_pp := InverseGeneralMapping(iso_pp);
|
|
196
|
+
T := InverseMonoid(GeneratorsOfInverseSemigroup(Range(iso_pp)),
|
|
197
|
+
EmptyPartialPerm());
|
|
198
|
+
|
|
199
|
+
iso := function(x)
|
|
200
|
+
if x = zero then
|
|
201
|
+
return EmptyPartialPerm();
|
|
202
|
+
fi;
|
|
203
|
+
return (x ^ inv_zm) ^ iso_pp;
|
|
204
|
+
end;
|
|
205
|
+
|
|
206
|
+
inv := function(x)
|
|
207
|
+
if DegreeOfPartialPerm(x) = 0 then
|
|
208
|
+
return zero;
|
|
209
|
+
fi;
|
|
210
|
+
return (x ^ inv_pp) ^ inj_zm;
|
|
211
|
+
end;
|
|
212
|
+
|
|
213
|
+
return SemigroupIsomorphismByFunctionNC(S, T, iso, inv);
|
|
214
|
+
end);
|
|
215
|
+
|
|
216
|
+
# The next method is copied directly from the GAP library the only change is
|
|
217
|
+
# the return value which uses SemigroupHomomorphismByFunction here but
|
|
218
|
+
# MagmaIsomorphismByFunctionNC in the GAP library.
|
|
219
|
+
|
|
220
|
+
InstallMethod(IsomorphismPartialPermSemigroup, "for a semigroup",
|
|
221
|
+
[IsSemigroup],
|
|
222
|
+
function(S)
|
|
223
|
+
local set, iso, gens, T;
|
|
224
|
+
|
|
225
|
+
if not IsInverseSemigroup(S) then
|
|
226
|
+
ErrorNoReturn("the argument must be an inverse semigroup");
|
|
227
|
+
fi;
|
|
228
|
+
|
|
229
|
+
set := AsSet(S);
|
|
230
|
+
|
|
231
|
+
iso := function(x)
|
|
232
|
+
local dom;
|
|
233
|
+
dom := Set(set * InversesOfSemigroupElement(S, x)[1]);
|
|
234
|
+
return PartialPermNC(List(dom, y -> Position(set, y)),
|
|
235
|
+
List(List(dom, y -> y * x),
|
|
236
|
+
y -> Position(set, y)));
|
|
237
|
+
end;
|
|
238
|
+
|
|
239
|
+
gens := GeneratorsOfSemigroup(S);
|
|
240
|
+
|
|
241
|
+
T := InverseSemigroup(List(gens, iso));
|
|
242
|
+
UseIsomorphismRelation(S, T);
|
|
243
|
+
|
|
244
|
+
return SemigroupHomomorphismByFunctionNC(S, T, iso);
|
|
245
|
+
end);
|
|
246
|
+
|
|
247
|
+
# The next method is copied directly from the GAP library the only change is
|
|
248
|
+
# the return value which uses SemigroupIsomorphismByFunctionNC here but
|
|
249
|
+
# MagmaIsomorphismByFunctionsNC in the GAP library.
|
|
250
|
+
|
|
251
|
+
InstallMethod(IsomorphismPartialPermSemigroup, "for a partial perm semigroup",
|
|
252
|
+
[IsPartialPermSemigroup],
|
|
253
|
+
S -> SemigroupIsomorphismByFunctionNC(S, S, IdFunc, IdFunc));
|
|
254
|
+
|
|
255
|
+
InstallMethod(SmallerDegreePartialPermRepresentation,
|
|
256
|
+
"for an inverse semigroup with inverse op",
|
|
257
|
+
[IsInverseSemigroup and IsGeneratorsOfInverseSemigroup],
|
|
258
|
+
function(S)
|
|
259
|
+
local map1, map2;
|
|
260
|
+
map1 := IsomorphismPartialPermSemigroup(S);
|
|
261
|
+
map2 := SmallerDegreePartialPermRepresentation(Range(map1));
|
|
262
|
+
return CompositionMapping(map2, map1);
|
|
263
|
+
end);
|
|
264
|
+
|
|
265
|
+
InstallMethod(SmallerDegreePartialPermRepresentation,
|
|
266
|
+
"for an inverse semigroup of partial permutations",
|
|
267
|
+
[IsInverseSemigroup and IsPartialPermSemigroup],
|
|
268
|
+
function(S)
|
|
269
|
+
local oldgens, newgens, D, e, h, lambdaorb, He, sup, trivialse, schutz,
|
|
270
|
+
sigmainv, enum, orbits, cosets, stabpp, psi, rho, rhoinv, stab, nrcosets, j,
|
|
271
|
+
reps, gen, offset, rep, box, subbox, T, map, inv, d, k, i, m;
|
|
272
|
+
|
|
273
|
+
oldgens := GeneratorsOfSemigroup(S);
|
|
274
|
+
newgens := List(oldgens, x -> []);
|
|
275
|
+
D := JoinIrreducibleDClasses(S);
|
|
276
|
+
|
|
277
|
+
for d in D do
|
|
278
|
+
e := RightOne(Representative(d));
|
|
279
|
+
|
|
280
|
+
# Generate representatives for all the H-Classes in the R-Class of He
|
|
281
|
+
h := HClassReps(GreensRClassOfElement(d, e));
|
|
282
|
+
lambdaorb := List(h, ImageSetOfPartialPerm);
|
|
283
|
+
|
|
284
|
+
He := GreensHClassOfElementNC(S, e);
|
|
285
|
+
sup := SupremumIdempotentsNC(Minorants(S, e), e);
|
|
286
|
+
trivialse := not ForAny(He, x -> NaturalLeqInverseSemigroup(S)(sup, x)
|
|
287
|
+
and x <> e);
|
|
288
|
+
|
|
289
|
+
if IsActingSemigroup(S) then
|
|
290
|
+
schutz := SchutzenbergerGroup(He);
|
|
291
|
+
sigmainv := x -> x ^ InverseGeneralMapping(IsomorphismPermGroup(He));
|
|
292
|
+
else
|
|
293
|
+
schutz := Group(());
|
|
294
|
+
enum := Enumerator(He);
|
|
295
|
+
for k in enum do
|
|
296
|
+
schutz := ClosureGroup(schutz, AsPermutation(k));
|
|
297
|
+
od;
|
|
298
|
+
sigmainv := x -> AsPartialPerm(x, DomainOfPartialPerm(e));
|
|
299
|
+
fi;
|
|
300
|
+
|
|
301
|
+
## Se is the subgroup of He whose elements have the same minorants as e
|
|
302
|
+
if trivialse then
|
|
303
|
+
orbits := [[ActionDegree(He) + 1]];
|
|
304
|
+
cosets := [e];
|
|
305
|
+
stabpp := He;
|
|
306
|
+
else
|
|
307
|
+
psi := ActionHomomorphism(schutz,
|
|
308
|
+
Difference(DomainOfPartialPerm(e),
|
|
309
|
+
DomainOfPartialPerm(sup)));
|
|
310
|
+
rho := SmallerDegreePermutationRepresentation(Image(psi));
|
|
311
|
+
rhoinv := InverseGeneralMapping(rho);
|
|
312
|
+
orbits := Orbits(Image(rho));
|
|
313
|
+
fi;
|
|
314
|
+
|
|
315
|
+
for i in orbits do
|
|
316
|
+
if not trivialse then
|
|
317
|
+
stab := ImagesSet(InverseGeneralMapping(psi),
|
|
318
|
+
ImagesSet(rhoinv, Stabilizer(Image(rho), i[1])));
|
|
319
|
+
cosets := RightTransversal(schutz, stab);
|
|
320
|
+
stabpp := Set(stab, sigmainv);
|
|
321
|
+
fi;
|
|
322
|
+
|
|
323
|
+
# Generate representatives for ALL the cosets the generator will act on
|
|
324
|
+
# Divide every H-Class in the R-Class into 'cosets' like stab in He
|
|
325
|
+
nrcosets := Size(h) * Length(cosets);
|
|
326
|
+
j := 0;
|
|
327
|
+
reps := EmptyPlist(nrcosets);
|
|
328
|
+
for k in [1 .. Size(h)] do
|
|
329
|
+
for m in [1 .. Length(cosets)] do
|
|
330
|
+
j := j + 1;
|
|
331
|
+
reps[j] := cosets[m] * h[k];
|
|
332
|
+
od;
|
|
333
|
+
od;
|
|
334
|
+
|
|
335
|
+
# Loop over old generators of S to calculate its action on the cosets
|
|
336
|
+
for j in [1 .. Length(oldgens)] do
|
|
337
|
+
gen := oldgens[j];
|
|
338
|
+
offset := Length(newgens[j]);
|
|
339
|
+
|
|
340
|
+
# Loop over cosets to calculate the image of each under the generator
|
|
341
|
+
for k in [1 .. nrcosets] do
|
|
342
|
+
rep := reps[k] * gen;
|
|
343
|
+
# Will the new generator will be defined at this point?
|
|
344
|
+
if not rep * rep ^ (-1) in stabpp then
|
|
345
|
+
Add(newgens[j], 0);
|
|
346
|
+
else
|
|
347
|
+
box := Position(lambdaorb, ImageSetOfPartialPerm(rep));
|
|
348
|
+
if trivialse then
|
|
349
|
+
subbox := 1;
|
|
350
|
+
else
|
|
351
|
+
# instead of AsPermutation we could do ^ sigma
|
|
352
|
+
subbox := PositionCanonical(cosets,
|
|
353
|
+
AsPermutation(rep * h[box] ^ -1));
|
|
354
|
+
fi;
|
|
355
|
+
Add(newgens[j], (box - 1) * Length(cosets) + subbox + offset);
|
|
356
|
+
fi;
|
|
357
|
+
od;
|
|
358
|
+
od;
|
|
359
|
+
od;
|
|
360
|
+
od;
|
|
361
|
+
Apply(newgens, PartialPermNC);
|
|
362
|
+
T := InverseSemigroup(newgens);
|
|
363
|
+
|
|
364
|
+
# Return identity mapping if nothing has been accomplished; else the result.
|
|
365
|
+
if NrMovedPoints(T) > NrMovedPoints(S)
|
|
366
|
+
or (NrMovedPoints(T) = NrMovedPoints(S)
|
|
367
|
+
and ActionDegree(T) >= ActionDegree(S)) then
|
|
368
|
+
return IdentityMapping(S);
|
|
369
|
+
fi;
|
|
370
|
+
|
|
371
|
+
map := x -> EvaluateWord(newgens, Factorization(S, x));
|
|
372
|
+
inv := x -> EvaluateWord(oldgens, Factorization(T, x));
|
|
373
|
+
|
|
374
|
+
return SemigroupIsomorphismByFunctionNC(S, T, map, inv);
|
|
375
|
+
end);
|
|
376
|
+
|
|
377
|
+
#############################################################################
|
|
378
|
+
## Algebraic attributes
|
|
379
|
+
#############################################################################
|
|
380
|
+
|
|
381
|
+
InstallMethod(Idempotents, "for a partial perm semigroup and pos int",
|
|
382
|
+
[IsPartialPermSemigroup, IsInt],
|
|
383
|
+
{S, rank} -> Filtered(Idempotents(S), x -> RankOfPartialPerm(x) = rank));
|
|
384
|
+
|
|
385
|
+
# this should really be in the library
|
|
386
|
+
|
|
387
|
+
InstallImmediateMethod(GeneratorsOfSemigroup,
|
|
388
|
+
IsPartialPermSemigroup and IsGroup and HasGeneratorsOfGroup,
|
|
389
|
+
0,
|
|
390
|
+
function(G)
|
|
391
|
+
if IsEmpty(GeneratorsOfGroup(G)) then
|
|
392
|
+
# WW: really this should be `return [One(G)];`, but this fails when running
|
|
393
|
+
# GAP's `tst/testinstall.g` for some reason that I can't figure out.
|
|
394
|
+
TryNextMethod();
|
|
395
|
+
fi;
|
|
396
|
+
return GeneratorsOfGroup(G);
|
|
397
|
+
end);
|
|
398
|
+
|
|
399
|
+
# it just so happens that the MultiplicativeNeutralElement of a semigroup of
|
|
400
|
+
# partial permutations has to coincide with the One. This is not the case for
|
|
401
|
+
# transformation semigroups
|
|
402
|
+
|
|
403
|
+
# same method for ideals
|
|
404
|
+
|
|
405
|
+
InstallMethod(MultiplicativeNeutralElement, "for a partial perm semigroup",
|
|
406
|
+
[IsPartialPermSemigroup], One);
|
|
407
|
+
|
|
408
|
+
# same method for ideals
|
|
409
|
+
|
|
410
|
+
InstallMethod(GroupOfUnits, "for a partial perm semigroup",
|
|
411
|
+
[IsPartialPermSemigroup],
|
|
412
|
+
function(S)
|
|
413
|
+
local H, map, inv, G, U, iso;
|
|
414
|
+
|
|
415
|
+
if MultiplicativeNeutralElement(S) = fail then
|
|
416
|
+
return fail;
|
|
417
|
+
fi;
|
|
418
|
+
|
|
419
|
+
H := GreensHClassOfElementNC(S, MultiplicativeNeutralElement(S));
|
|
420
|
+
map := IsomorphismPermGroup(H);
|
|
421
|
+
inv := InverseGeneralMapping(map);
|
|
422
|
+
G := Range(map);
|
|
423
|
+
|
|
424
|
+
U := Semigroup(List(GeneratorsOfGroup(G), x -> x ^ inv));
|
|
425
|
+
SetIsGroupAsSemigroup(U, true);
|
|
426
|
+
UseIsomorphismRelation(U, G);
|
|
427
|
+
|
|
428
|
+
iso := SemigroupIsomorphismByFunctionNC(U,
|
|
429
|
+
G,
|
|
430
|
+
x -> x ^ map,
|
|
431
|
+
x -> x ^ inv);
|
|
432
|
+
SetIsomorphismPermGroup(U, iso);
|
|
433
|
+
|
|
434
|
+
return U;
|
|
435
|
+
end);
|
|
436
|
+
|
|
437
|
+
# the following method is required to beat the method for
|
|
438
|
+
# IsPartialPermCollection in the library.
|
|
439
|
+
|
|
440
|
+
InstallOtherMethod(One, "for a partial perm semigroup ideal",
|
|
441
|
+
[IsPartialPermSemigroup and IsSemigroupIdeal],
|
|
442
|
+
function(I)
|
|
443
|
+
local pts, x;
|
|
444
|
+
|
|
445
|
+
if HasGeneratorsOfSemigroup(I) then
|
|
446
|
+
x := One(GeneratorsOfSemigroup(I));
|
|
447
|
+
if x in I then
|
|
448
|
+
return x;
|
|
449
|
+
else
|
|
450
|
+
return fail;
|
|
451
|
+
fi;
|
|
452
|
+
fi;
|
|
453
|
+
|
|
454
|
+
pts := Union(ComponentsOfPartialPermSemigroup(I));
|
|
455
|
+
x := PartialPermNC(pts, pts);
|
|
456
|
+
|
|
457
|
+
if x in I then
|
|
458
|
+
return x;
|
|
459
|
+
fi;
|
|
460
|
+
return fail;
|
|
461
|
+
end);
|
|
462
|
+
|
|
463
|
+
InstallMethod(NaturalLeqInverseSemigroup, "for a partial perm semigroup",
|
|
464
|
+
[IsPartialPermSemigroup],
|
|
465
|
+
function(S)
|
|
466
|
+
if not IsInverseSemigroup(S) then
|
|
467
|
+
ErrorNoReturn("the argument is not an inverse semigroup");
|
|
468
|
+
fi;
|
|
469
|
+
return NaturalLeqPartialPerm;
|
|
470
|
+
end);
|
|
471
|
+
|
|
472
|
+
#############################################################################
|
|
473
|
+
## Degree, rank
|
|
474
|
+
#############################################################################
|
|
475
|
+
|
|
476
|
+
InstallMethod(DegreeOfPartialPermSemigroup,
|
|
477
|
+
"for a partial perm semigroup ideal",
|
|
478
|
+
[IsPartialPermSemigroup and IsSemigroupIdeal],
|
|
479
|
+
function(I)
|
|
480
|
+
local dom;
|
|
481
|
+
dom := DomainOfPartialPermCollection(I);
|
|
482
|
+
if IsEmpty(dom) then
|
|
483
|
+
return 0;
|
|
484
|
+
fi;
|
|
485
|
+
return Maximum(dom);
|
|
486
|
+
end);
|
|
487
|
+
|
|
488
|
+
InstallMethod(CodegreeOfPartialPermSemigroup,
|
|
489
|
+
"for a partial perm semigroup ideal",
|
|
490
|
+
[IsPartialPermSemigroup and IsSemigroupIdeal],
|
|
491
|
+
function(I)
|
|
492
|
+
local im;
|
|
493
|
+
im := ImageOfPartialPermCollection(I);
|
|
494
|
+
if IsEmpty(im) then
|
|
495
|
+
return 0;
|
|
496
|
+
fi;
|
|
497
|
+
return Maximum(im);
|
|
498
|
+
end);
|
|
499
|
+
|
|
500
|
+
InstallMethod(RankOfPartialPermSemigroup,
|
|
501
|
+
"for a partial perm semigroup",
|
|
502
|
+
[IsPartialPermSemigroup], RankOfPartialPermCollection);
|
|
503
|
+
|
|
504
|
+
InstallMethod(RankOfPartialPermSemigroup,
|
|
505
|
+
"for a partial perm semigroup ideal",
|
|
506
|
+
[IsPartialPermSemigroup and IsSemigroupIdeal],
|
|
507
|
+
I -> Length(DomainOfPartialPermCollection(I)));
|
|
508
|
+
|
|
509
|
+
#############################################################################
|
|
510
|
+
## Domain, image
|
|
511
|
+
#############################################################################
|
|
512
|
+
|
|
513
|
+
BindGlobal("_DomainImageOfPartialPermIdeal",
|
|
514
|
+
function(I, DomainOrImage, InversesOrGenerators)
|
|
515
|
+
local O, S, hash, val, x, y;
|
|
516
|
+
|
|
517
|
+
O := DomainOrImage(GeneratorsOfSemigroupIdeal(I));
|
|
518
|
+
S := SupersemigroupOfIdeal(I);
|
|
519
|
+
if O = DomainOrImage(S) then
|
|
520
|
+
return O;
|
|
521
|
+
fi;
|
|
522
|
+
O := ShallowCopy(O);
|
|
523
|
+
hash := HashSet();
|
|
524
|
+
for x in O do
|
|
525
|
+
for y in InversesOrGenerators do
|
|
526
|
+
val := x ^ y;
|
|
527
|
+
if val <> 0 and not val in hash then
|
|
528
|
+
Add(O, val);
|
|
529
|
+
AddSet(hash, val);
|
|
530
|
+
fi;
|
|
531
|
+
od;
|
|
532
|
+
od;
|
|
533
|
+
return Set(O);
|
|
534
|
+
end);
|
|
535
|
+
|
|
536
|
+
InstallMethod(ImageOfPartialPermCollection,
|
|
537
|
+
"for a partial perm semigroup ideal",
|
|
538
|
+
[IsPartialPermSemigroup and IsSemigroupIdeal],
|
|
539
|
+
function(I)
|
|
540
|
+
local S;
|
|
541
|
+
S := SupersemigroupOfIdeal(I);
|
|
542
|
+
return _DomainImageOfPartialPermIdeal(I,
|
|
543
|
+
ImageOfPartialPermCollection,
|
|
544
|
+
GeneratorsOfSemigroup(S));
|
|
545
|
+
end);
|
|
546
|
+
|
|
547
|
+
InstallMethod(DomainOfPartialPermCollection,
|
|
548
|
+
"for a partial perm semigroup ideal",
|
|
549
|
+
[IsPartialPermSemigroup and IsSemigroupIdeal],
|
|
550
|
+
function(I)
|
|
551
|
+
local S;
|
|
552
|
+
S := SupersemigroupOfIdeal(I);
|
|
553
|
+
return _DomainImageOfPartialPermIdeal(I,
|
|
554
|
+
DomainOfPartialPermCollection,
|
|
555
|
+
List(GeneratorsOfSemigroup(S),
|
|
556
|
+
InverseOp));
|
|
557
|
+
end);
|
|
558
|
+
|
|
559
|
+
#############################################################################
|
|
560
|
+
## Action on points
|
|
561
|
+
#############################################################################
|
|
562
|
+
|
|
563
|
+
InstallMethod(FixedPointsOfPartialPermSemigroup,
|
|
564
|
+
"for a partial perm semigroup with generators",
|
|
565
|
+
[IsPartialPermSemigroup and HasGeneratorsOfSemigroup],
|
|
566
|
+
function(S)
|
|
567
|
+
local n, gens;
|
|
568
|
+
n := DegreeOfPartialPermSemigroup(S);
|
|
569
|
+
gens := GeneratorsOfSemigroup(S);
|
|
570
|
+
return Filtered([1 .. n], i -> ForAll(gens, x -> i ^ x = i));
|
|
571
|
+
end);
|
|
572
|
+
|
|
573
|
+
InstallMethod(FixedPointsOfPartialPermSemigroup,
|
|
574
|
+
"for a partial perm semigroup ideal",
|
|
575
|
+
[IsPartialPermSemigroup and IsSemigroupIdeal],
|
|
576
|
+
function(I)
|
|
577
|
+
local S, F;
|
|
578
|
+
|
|
579
|
+
S := SupersemigroupOfIdeal(I);
|
|
580
|
+
F := FixedPointsOfPartialPermSemigroup(S);
|
|
581
|
+
return Intersection(F, DomainOfPartialPermCollection(I));
|
|
582
|
+
end);
|
|
583
|
+
|
|
584
|
+
InstallMethod(DigraphOfActionOnPoints, "for a partial perm semigroup",
|
|
585
|
+
[IsPartialPermSemigroup],
|
|
586
|
+
S -> DigraphOfActionOnPoints(S, Maximum(DegreeOfPartialPermSemigroup(S),
|
|
587
|
+
CodegreeOfPartialPermSemigroup(S))));
|
|
588
|
+
|
|
589
|
+
InstallMethod(DigraphOfActionOnPoints, "for a partial perm semigroup",
|
|
590
|
+
[IsPartialPermSemigroup, IsInt],
|
|
591
|
+
function(S, n)
|
|
592
|
+
local gens, out, range, i, x;
|
|
593
|
+
|
|
594
|
+
if n < 0 then
|
|
595
|
+
ErrorNoReturn("the 2nd argument (an integer) must be non-negative");
|
|
596
|
+
elif n = 0 then
|
|
597
|
+
return EmptyDigraph(0);
|
|
598
|
+
elif HasDigraphOfActionOnPoints(S)
|
|
599
|
+
and n = Maximum(DegreeOfPartialPermSemigroup(S),
|
|
600
|
+
CodegreeOfPartialPermSemigroup(S)) then
|
|
601
|
+
return DigraphOfActionOnPoints(S);
|
|
602
|
+
elif IsSemigroupIdeal(S) then
|
|
603
|
+
gens := GeneratorsOfSemigroup(SupersemigroupOfIdeal(S));
|
|
604
|
+
else
|
|
605
|
+
gens := GeneratorsOfSemigroup(S);
|
|
606
|
+
fi;
|
|
607
|
+
|
|
608
|
+
out := List([1 .. n], x -> []);
|
|
609
|
+
for i in [1 .. n] do
|
|
610
|
+
for x in gens do
|
|
611
|
+
range := i ^ x;
|
|
612
|
+
if range <= n and range > 0 then
|
|
613
|
+
Add(out[i], range);
|
|
614
|
+
fi;
|
|
615
|
+
od;
|
|
616
|
+
od;
|
|
617
|
+
return DigraphNC(out);
|
|
618
|
+
end);
|
|
619
|
+
|
|
620
|
+
InstallMethod(ComponentRepresentatives,
|
|
621
|
+
"for a partial perm or transf semigroup", [IsSemigroup],
|
|
622
|
+
function(S)
|
|
623
|
+
local D, C;
|
|
624
|
+
if not (IsPartialPermSemigroup(S) or IsTransformationSemigroup(S)) then
|
|
625
|
+
TryNextMethod();
|
|
626
|
+
fi;
|
|
627
|
+
D := DigraphMutableCopy(DigraphOfActionOnPoints(S));
|
|
628
|
+
C := DigraphStronglyConnectedComponents(D).comps;
|
|
629
|
+
DigraphRemoveLoops(QuotientDigraph(D, C));
|
|
630
|
+
return List(DigraphSources(D), x -> DigraphVertexLabel(D, x)[1]);
|
|
631
|
+
end);
|
|
632
|
+
|
|
633
|
+
InstallMethod(ComponentRepsOfPartialPermSemigroup,
|
|
634
|
+
"for a partial perm semigroup", [IsPartialPermSemigroup],
|
|
635
|
+
ComponentRepresentatives);
|
|
636
|
+
|
|
637
|
+
InstallMethod(ComponentsOfPartialPermSemigroup,
|
|
638
|
+
"for a partial perm semigroup", [IsPartialPermSemigroup],
|
|
639
|
+
S -> DigraphConnectedComponents(DigraphOfActionOnPoints(S)).comps);
|
|
640
|
+
|
|
641
|
+
InstallMethod(CyclesOfPartialPermSemigroup,
|
|
642
|
+
"for a partial perm semigroup", [IsPartialPermSemigroup],
|
|
643
|
+
function(S)
|
|
644
|
+
local D, C, F;
|
|
645
|
+
D := DigraphOfActionOnPoints(S);
|
|
646
|
+
C := DigraphStronglyConnectedComponents(D).comps;
|
|
647
|
+
C := Filtered(C, x -> Size(x) > 1);
|
|
648
|
+
F := FixedPointsOfPartialPermSemigroup(S);
|
|
649
|
+
Append(C, List(F, x -> [x]));
|
|
650
|
+
return C;
|
|
651
|
+
end);
|
|
652
|
+
|
|
653
|
+
InstallMethod(RepresentativeOfMinimalIdealNC,
|
|
654
|
+
"for a partial perm semigroup with generators",
|
|
655
|
+
[IsPartialPermSemigroup and HasGeneratorsOfSemigroup], 1,
|
|
656
|
+
function(S)
|
|
657
|
+
local D, N, stack, Q, M, seen, good, labels, next, result, root, x;
|
|
658
|
+
|
|
659
|
+
D := DigraphOfActionOnPoints(S);
|
|
660
|
+
N := Length(GeneratorsOfSemigroup(S));
|
|
661
|
+
|
|
662
|
+
# A point occurs in the domain/image of a partial perm in the minimal ideal
|
|
663
|
+
# if and only if no node in D reachable from that point has degree < N.
|
|
664
|
+
# We perform a simple DFS to find such nodes.
|
|
665
|
+
stack := Stack();
|
|
666
|
+
|
|
667
|
+
Q := QuotientDigraph(D, DigraphStronglyConnectedComponents(D).comps);
|
|
668
|
+
M := DigraphNrVertices(Q);
|
|
669
|
+
seen := BlistList([1 .. M], []);
|
|
670
|
+
good := BlistList([1 .. M], [1 .. M]);
|
|
671
|
+
labels := DigraphVertexLabels(Q);
|
|
672
|
+
|
|
673
|
+
for root in [1 .. M] do
|
|
674
|
+
if not seen[root] then
|
|
675
|
+
Push(stack, root);
|
|
676
|
+
while Size(stack) > 0 do
|
|
677
|
+
next := Pop(stack);
|
|
678
|
+
if next < 0 then
|
|
679
|
+
# Postorder: all neighbours of -next already processed
|
|
680
|
+
next := -next;
|
|
681
|
+
if good[next]
|
|
682
|
+
and ForAny(OutNeighboursOfVertex(Q, next), x -> not good[x]) then
|
|
683
|
+
good[next] := false;
|
|
684
|
+
fi;
|
|
685
|
+
elif not seen[next] then
|
|
686
|
+
seen[next] := true;
|
|
687
|
+
if good[next]
|
|
688
|
+
and ForAny(labels[next],
|
|
689
|
+
x -> Length(OutNeighboursOfVertex(D, x)) < N) then
|
|
690
|
+
good[next] := false;
|
|
691
|
+
fi;
|
|
692
|
+
# To mark the starting point of the neighbours of next in stack
|
|
693
|
+
Push(stack, -next);
|
|
694
|
+
for x in OutNeighboursOfVertex(Q, next) do
|
|
695
|
+
Push(stack, x);
|
|
696
|
+
od;
|
|
697
|
+
fi;
|
|
698
|
+
od;
|
|
699
|
+
fi;
|
|
700
|
+
od;
|
|
701
|
+
|
|
702
|
+
result := [];
|
|
703
|
+
for x in [1 .. M] do
|
|
704
|
+
if good[x] then
|
|
705
|
+
UniteSet(result, labels[x]);
|
|
706
|
+
fi;
|
|
707
|
+
od;
|
|
708
|
+
|
|
709
|
+
# Minimal ideal contains an idempotent!
|
|
710
|
+
return PartialPermNC(result, result);
|
|
711
|
+
end);
|