passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-gap-pkg-semigroups might be problematic. Click here for more details.
- gap/pkg/semigroups/CHANGELOG.md +1699 -0
- gap/pkg/semigroups/CONTRIBUTING.md +91 -0
- gap/pkg/semigroups/GNUmakefile +110 -0
- gap/pkg/semigroups/GNUmakefile.in +110 -0
- gap/pkg/semigroups/GPL +674 -0
- gap/pkg/semigroups/LICENSE +16 -0
- gap/pkg/semigroups/Makefile +26 -0
- gap/pkg/semigroups/Makefile.gappkg +225 -0
- gap/pkg/semigroups/PackageInfo.g +529 -0
- gap/pkg/semigroups/README.md +102 -0
- gap/pkg/semigroups/VERSIONS +112 -0
- gap/pkg/semigroups/aclocal.m4 +375 -0
- gap/pkg/semigroups/autogen.sh +25 -0
- gap/pkg/semigroups/bin/aarch64-unknown-linux-gnu-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1016 -0
- gap/pkg/semigroups/config.status +1132 -0
- gap/pkg/semigroups/config.sub +1960 -0
- gap/pkg/semigroups/configure +9742 -0
- gap/pkg/semigroups/configure.ac +71 -0
- gap/pkg/semigroups/data/doc/greens.pickle +1 -0
- gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
- gap/pkg/semigroups/data/tst/bipart4 +10 -0
- gap/pkg/semigroups/data/tst/pperm10 +1 -0
- gap/pkg/semigroups/data/tst/tables.gz +0 -0
- gap/pkg/semigroups/data/tst/testdata +1 -0
- gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
- gap/pkg/semigroups/data/tst/trans3 +7 -0
- gap/pkg/semigroups/data/tst/trans3-old +7 -0
- gap/pkg/semigroups/environment.yml +7 -0
- gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
- gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
- gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
- gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
- gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
- gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
- gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
- gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
- gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
- gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
- gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
- gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
- gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
- gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
- gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
- gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
- gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
- gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
- gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
- gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
- gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
- gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
- gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
- gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
- gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
- gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
- gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
- gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
- gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
- gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
- gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
- gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
- gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
- gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
- gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
- gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
- gap/pkg/semigroups/gap/elements/elements.gd +11 -0
- gap/pkg/semigroups/gap/elements/elements.gi +121 -0
- gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
- gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
- gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
- gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
- gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
- gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
- gap/pkg/semigroups/gap/elements/star.gd +21 -0
- gap/pkg/semigroups/gap/elements/star.gi +21 -0
- gap/pkg/semigroups/gap/elements/trans.gd +13 -0
- gap/pkg/semigroups/gap/elements/trans.gi +50 -0
- gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
- gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
- gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
- gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
- gap/pkg/semigroups/gap/fp/word.gd +15 -0
- gap/pkg/semigroups/gap/fp/word.gi +67 -0
- gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
- gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
- gap/pkg/semigroups/gap/greens/acting.gd +81 -0
- gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
- gap/pkg/semigroups/gap/greens/generic.gd +117 -0
- gap/pkg/semigroups/gap/greens/generic.gi +630 -0
- gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
- gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
- gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
- gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
- gap/pkg/semigroups/gap/main/acting.gd +36 -0
- gap/pkg/semigroups/gap/main/acting.gi +779 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
- gap/pkg/semigroups/gap/main/graded.gd +26 -0
- gap/pkg/semigroups/gap/main/graded.gi +355 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
- gap/pkg/semigroups/gap/main/orbits.gd +24 -0
- gap/pkg/semigroups/gap/main/orbits.gi +512 -0
- gap/pkg/semigroups/gap/main/semiact.gd +20 -0
- gap/pkg/semigroups/gap/main/semiact.gi +821 -0
- gap/pkg/semigroups/gap/main/setup.gd +61 -0
- gap/pkg/semigroups/gap/main/setup.gi +1094 -0
- gap/pkg/semigroups/gap/obsolete.gd +9 -0
- gap/pkg/semigroups/gap/obsolete.gi +14 -0
- gap/pkg/semigroups/gap/options.g +55 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
- gap/pkg/semigroups/gap/tools/display.gd +24 -0
- gap/pkg/semigroups/gap/tools/display.gi +749 -0
- gap/pkg/semigroups/gap/tools/io.gd +17 -0
- gap/pkg/semigroups/gap/tools/io.gi +543 -0
- gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
- gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
- gap/pkg/semigroups/gap/tools/utils.gd +19 -0
- gap/pkg/semigroups/gap/tools/utils.gi +756 -0
- gap/pkg/semigroups/gapbind14/.ccls +18 -0
- gap/pkg/semigroups/gapbind14/.clang-format +104 -0
- gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
- gap/pkg/semigroups/gapbind14/LICENSE +674 -0
- gap/pkg/semigroups/gapbind14/README.md +76 -0
- gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
- gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
- gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
- gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
- gap/pkg/semigroups/gapbind14/demo/configure +34 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
- gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
- gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
- gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
- gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
- gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
- gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
- gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
- gap/pkg/semigroups/init.g +150 -0
- gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
- gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
- gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
- gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
- gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
- gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
- gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
- gap/pkg/semigroups/m4/find_gap.m4 +94 -0
- gap/pkg/semigroups/makedoc.g +153 -0
- gap/pkg/semigroups/prerequisites.sh +62 -0
- gap/pkg/semigroups/read.g +105 -0
- gap/pkg/semigroups/release.toml +6 -0
- gap/pkg/semigroups/tst/extreme/README +2 -0
- gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
- gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
- gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
- gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
- gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
- gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
- gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
- gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
- gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
- gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
- gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
- gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
- gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
- gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
- gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
- gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
- gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
- gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
- gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
- gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
- gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
- gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
- gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
- gap/pkg/semigroups/tst/standard/README +2 -0
- gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
- gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
- gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
- gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
- gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
- gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
- gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
- gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
- gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
- gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
- gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
- gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
- gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
- gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
- gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
- gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
- gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
- gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
- gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
- gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
- gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
- gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
- gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
- gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
- gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
- gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
- gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
- gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
- gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
- gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
- gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
- gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
- gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
- gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
- gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
- gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
- gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
- gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
- gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
- gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
- gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
- gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
- gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
- gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
- gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
- gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
- gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
- gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
- gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
- gap/pkg/semigroups/tst/standard/options.tst +54 -0
- gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
- gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
- gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
- gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
- gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
- gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
- gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
- gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
- gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
- gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
- gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
- gap/pkg/semigroups/tst/testinstall.tst +1815 -0
- gap/pkg/semigroups/tst/teststandard.g +22 -0
- gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
- gap/pkg/semigroups/tst/workspaces/load.g +11 -0
- gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
- gap/pkg/semigroups/tst/workspaces/save.g +14 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA +93 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +354 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +6 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
- passagemath_gap_pkg_semigroups.libs/libsemigroups-8ea3c4e7.so.2.0.0 +0 -0
- sage/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/gap_pkg_semigroups.abi3.so +0 -0
|
@@ -0,0 +1,708 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## attributes/inverse.gi
|
|
4
|
+
## Copyright (C) 2013-2022 James D. Mitchell
|
|
5
|
+
## Wilf A. Wilson
|
|
6
|
+
## Rhiannon Dougall
|
|
7
|
+
## Robert Hancock
|
|
8
|
+
##
|
|
9
|
+
## Licensing information can be found in the README file of this package.
|
|
10
|
+
##
|
|
11
|
+
#############################################################################
|
|
12
|
+
##
|
|
13
|
+
|
|
14
|
+
InstallMethod(IdempotentGeneratedSubsemigroup,
|
|
15
|
+
"for an inverse semigroup with inverse op",
|
|
16
|
+
[IsInverseSemigroup and IsGeneratorsOfInverseSemigroup],
|
|
17
|
+
function(S)
|
|
18
|
+
local out;
|
|
19
|
+
if not IsFinite(S) then
|
|
20
|
+
TryNextMethod();
|
|
21
|
+
fi;
|
|
22
|
+
# Use acting := false since the output of this is a semilattice which is
|
|
23
|
+
# J-trivial and hence it is better to use the Froidure-Pin Algorithm
|
|
24
|
+
out := InverseSemigroup(Idempotents(S), rec(small := true, acting := false));
|
|
25
|
+
SetIsSemilattice(out, true);
|
|
26
|
+
return out;
|
|
27
|
+
end);
|
|
28
|
+
|
|
29
|
+
# fall back method
|
|
30
|
+
|
|
31
|
+
InstallMethod(NaturalPartialOrder, "for a semigroup",
|
|
32
|
+
[IsSemigroup],
|
|
33
|
+
function(S)
|
|
34
|
+
local elts, p, func, out, i, j;
|
|
35
|
+
|
|
36
|
+
if not IsFinite(S) then
|
|
37
|
+
ErrorNoReturn("the argument (a semigroup) is not finite");
|
|
38
|
+
elif not IsInverseSemigroup(S) then
|
|
39
|
+
ErrorNoReturn("the argument (a semigroup) is not an inverse semigroup");
|
|
40
|
+
fi;
|
|
41
|
+
|
|
42
|
+
Info(InfoWarning, 2, "NaturalPartialOrder: this method ",
|
|
43
|
+
"fully enumerates its argument!");
|
|
44
|
+
|
|
45
|
+
elts := ShallowCopy(Elements(S));
|
|
46
|
+
p := Sortex(elts, {x, y} -> IsGreensDGreaterThanFunc(S)(y, x)) ^ -1;
|
|
47
|
+
func := NaturalLeqInverseSemigroup(S);
|
|
48
|
+
out := List([1 .. Size(S)], x -> []);
|
|
49
|
+
|
|
50
|
+
# <elts> is sorted so that D_elts[i] < D_elts[j] => i < j.
|
|
51
|
+
# Thus NaturalLeqInverseSemigroup(S)(i, j) => i <= j.
|
|
52
|
+
|
|
53
|
+
for i in [1 .. Size(S)] do
|
|
54
|
+
for j in [i + 1 .. Size(S)] do
|
|
55
|
+
if func(elts[i], elts[j]) then
|
|
56
|
+
AddSet(out[j ^ p], i ^ p);
|
|
57
|
+
fi;
|
|
58
|
+
od;
|
|
59
|
+
od;
|
|
60
|
+
return out;
|
|
61
|
+
end);
|
|
62
|
+
|
|
63
|
+
# fall back method
|
|
64
|
+
|
|
65
|
+
InstallMethod(NaturalLeqInverseSemigroup, "for a semigroup",
|
|
66
|
+
[IsSemigroup],
|
|
67
|
+
function(S)
|
|
68
|
+
|
|
69
|
+
if not IsFinite(S) then
|
|
70
|
+
ErrorNoReturn("the argument (a semigroup) is not finite");
|
|
71
|
+
elif not IsInverseSemigroup(S) then
|
|
72
|
+
ErrorNoReturn("the argument (a semigroup) is not an inverse semigroup");
|
|
73
|
+
fi;
|
|
74
|
+
|
|
75
|
+
return
|
|
76
|
+
function(x, y)
|
|
77
|
+
local z;
|
|
78
|
+
z := InversesOfSemigroupElement(S, x)[1];
|
|
79
|
+
return x * z = y * z;
|
|
80
|
+
end;
|
|
81
|
+
end);
|
|
82
|
+
|
|
83
|
+
# same method for ideals
|
|
84
|
+
|
|
85
|
+
InstallMethod(CharacterTableOfInverseSemigroup,
|
|
86
|
+
"for an inverse semigroup of partial permutations",
|
|
87
|
+
[IsInverseSemigroup and IsPartialPermSemigroup and IsActingSemigroup],
|
|
88
|
+
function(S)
|
|
89
|
+
local reps, p, H, C, r, tbl, id, l, A, o, lookup, conjclass, conjlens,
|
|
90
|
+
j, conjreps, dom, subsets, x, m, u, k, h, i, n, y;
|
|
91
|
+
|
|
92
|
+
reps := ShallowCopy(DClassReps(S));
|
|
93
|
+
p := Sortex(reps, function(x, y)
|
|
94
|
+
return RankOfPartialPerm(x) > RankOfPartialPerm(y)
|
|
95
|
+
or (RankOfPartialPerm(x) = RankOfPartialPerm(y)
|
|
96
|
+
and x > y);
|
|
97
|
+
end);
|
|
98
|
+
|
|
99
|
+
H := List(reps, e -> SchutzenbergerGroup(HClass(S, e)));
|
|
100
|
+
C := []; # The group character matrices
|
|
101
|
+
r := 0;
|
|
102
|
+
|
|
103
|
+
# The block diagonal matrix of group character matrices
|
|
104
|
+
for h in H do
|
|
105
|
+
tbl := CharacterTable(h);
|
|
106
|
+
id := IdentificationOfConjugacyClasses(tbl);
|
|
107
|
+
tbl := Irr(tbl);
|
|
108
|
+
l := Length(id);
|
|
109
|
+
for i in [1 + r .. l + r] do
|
|
110
|
+
C[i] := [];
|
|
111
|
+
for j in [1 .. r] do
|
|
112
|
+
C[i][j] := 0;
|
|
113
|
+
C[j][i] := 0;
|
|
114
|
+
od;
|
|
115
|
+
|
|
116
|
+
for j in [1 + r .. l + r] do
|
|
117
|
+
C[i][j] := tbl[i - r][Position(id, j - r)];
|
|
118
|
+
od;
|
|
119
|
+
od;
|
|
120
|
+
r := r + l;
|
|
121
|
+
od;
|
|
122
|
+
|
|
123
|
+
A := List([1 .. r], x -> [1 .. r] * 0);
|
|
124
|
+
o := LambdaOrb(S);
|
|
125
|
+
lookup := OrbSCCLookup(o);
|
|
126
|
+
|
|
127
|
+
conjclass := [ConjugacyClasses(H[1])];
|
|
128
|
+
conjlens := [0];
|
|
129
|
+
|
|
130
|
+
for i in [2 .. Length(H)] do
|
|
131
|
+
Add(conjclass, ConjugacyClasses(H[i]));
|
|
132
|
+
conjlens[i] := conjlens[i - 1] + Length(conjclass[i - 1]);
|
|
133
|
+
od;
|
|
134
|
+
|
|
135
|
+
j := 0;
|
|
136
|
+
conjreps := [];
|
|
137
|
+
for i in [1 .. Length(H)] do
|
|
138
|
+
dom := DomainOfPartialPerm(reps[i]);
|
|
139
|
+
subsets := Filtered(o, x -> IsSubset(dom, x));
|
|
140
|
+
for n in [1 .. Length(conjclass[i])] do
|
|
141
|
+
j := j + 1;
|
|
142
|
+
conjreps[n + conjlens[i]] :=
|
|
143
|
+
AsPartialPerm(Representative(conjclass[i][n]), dom);
|
|
144
|
+
for y in subsets do
|
|
145
|
+
x := RestrictedPartialPerm(conjreps[n + conjlens[i]], y);
|
|
146
|
+
if y = ImageSetOfPartialPerm(x) then
|
|
147
|
+
l := Position(o, y);
|
|
148
|
+
m := lookup[l];
|
|
149
|
+
u := LambdaOrbMult(o, m, l);
|
|
150
|
+
x := AsPermutation(u[1] * x * u[2]);
|
|
151
|
+
m := (m - 1) ^ p;
|
|
152
|
+
k := PositionProperty(conjclass[m], class -> x in class)
|
|
153
|
+
+ conjlens[m];
|
|
154
|
+
A[k][j] := A[k][j] + 1;
|
|
155
|
+
fi;
|
|
156
|
+
od;
|
|
157
|
+
od;
|
|
158
|
+
od;
|
|
159
|
+
return [C * A, conjreps];
|
|
160
|
+
end);
|
|
161
|
+
|
|
162
|
+
# same method for ideals
|
|
163
|
+
|
|
164
|
+
InstallMethod(IsGreensDGreaterThanFunc, "for an inverse acting semigroup rep",
|
|
165
|
+
[IsInverseActingSemigroupRep],
|
|
166
|
+
function(S)
|
|
167
|
+
local D, o;
|
|
168
|
+
|
|
169
|
+
D := PartialOrderOfDClasses(S);
|
|
170
|
+
o := LambdaOrb(S);
|
|
171
|
+
|
|
172
|
+
return function(x, y)
|
|
173
|
+
local u, v;
|
|
174
|
+
if x = y then
|
|
175
|
+
return false;
|
|
176
|
+
fi;
|
|
177
|
+
u := OrbSCCLookup(o)[Position(o, LambdaFunc(S)(x))] - 1;
|
|
178
|
+
v := OrbSCCLookup(o)[Position(o, LambdaFunc(S)(y))] - 1;
|
|
179
|
+
return u <> v and IsReachable(D, u, v);
|
|
180
|
+
end;
|
|
181
|
+
end);
|
|
182
|
+
|
|
183
|
+
# same method for ideals
|
|
184
|
+
|
|
185
|
+
InstallMethod(PrimitiveIdempotents, "for a semigroup",
|
|
186
|
+
[IsSemigroup],
|
|
187
|
+
function(S)
|
|
188
|
+
local T, i, gr, prims;
|
|
189
|
+
|
|
190
|
+
if not IsFinite(S) then
|
|
191
|
+
ErrorNoReturn("the argument (a semigroup) is not finite");
|
|
192
|
+
elif not IsInverseSemigroup(S) then
|
|
193
|
+
ErrorNoReturn("the argument (a semigroup) is not an inverse semigroup");
|
|
194
|
+
elif MultiplicativeZero(S) = fail then
|
|
195
|
+
return Idempotents(MinimalIdeal(S));
|
|
196
|
+
fi;
|
|
197
|
+
|
|
198
|
+
T := IdempotentGeneratedSubsemigroup(S);
|
|
199
|
+
i := Position(Elements(T), MultiplicativeZero(S));
|
|
200
|
+
# TODO(later): NaturalPartialOrder should return a Digraph but
|
|
201
|
+
# NaturalPartialOrder is declared in GAP library, and so we can't.
|
|
202
|
+
gr := DigraphReflexiveTransitiveReduction(Digraph(NaturalPartialOrder(T)));
|
|
203
|
+
prims := InNeighboursOfVertex(gr, i);
|
|
204
|
+
return EnumeratorSorted(T){prims};
|
|
205
|
+
end);
|
|
206
|
+
|
|
207
|
+
InstallMethod(PrimitiveIdempotents, "for acting inverse semigroup rep",
|
|
208
|
+
[IsInverseActingSemigroupRep],
|
|
209
|
+
function(s)
|
|
210
|
+
local o, scc, rank, min, l, min2, m;
|
|
211
|
+
|
|
212
|
+
o := LambdaOrb(s);
|
|
213
|
+
scc := OrbSCC(o);
|
|
214
|
+
rank := LambdaRank(s);
|
|
215
|
+
min := ActionDegree(s);
|
|
216
|
+
|
|
217
|
+
if MultiplicativeZero(s) = fail then
|
|
218
|
+
for m in [2 .. Length(scc)] do
|
|
219
|
+
l := rank(o[scc[m][1]]);
|
|
220
|
+
if l < min then
|
|
221
|
+
min := l;
|
|
222
|
+
fi;
|
|
223
|
+
od;
|
|
224
|
+
return Idempotents(s, min);
|
|
225
|
+
fi;
|
|
226
|
+
|
|
227
|
+
# s has a multiplicative zero
|
|
228
|
+
for m in [2 .. Length(scc)] do
|
|
229
|
+
l := rank(o[scc[m][1]]);
|
|
230
|
+
if l < min then
|
|
231
|
+
min2 := min;
|
|
232
|
+
min := l;
|
|
233
|
+
fi;
|
|
234
|
+
od;
|
|
235
|
+
return Idempotents(s, min2);
|
|
236
|
+
end);
|
|
237
|
+
|
|
238
|
+
# same method for ideals
|
|
239
|
+
# TODO(later) a non-inverse-op version of this
|
|
240
|
+
|
|
241
|
+
InstallMethod(IsJoinIrreducible,
|
|
242
|
+
"for inverse semigroup with inverse op and a multiplicative element",
|
|
243
|
+
[IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
|
|
244
|
+
IsMultiplicativeElement],
|
|
245
|
+
function(S, x)
|
|
246
|
+
local elts, leq, y, i, k, j, sup;
|
|
247
|
+
|
|
248
|
+
if not x in S then
|
|
249
|
+
ErrorNoReturn("the 2nd argument (a mult. elt.) does not belong to ",
|
|
250
|
+
"the 1st argument (an inverse semigroup)");
|
|
251
|
+
fi;
|
|
252
|
+
|
|
253
|
+
if IsMultiplicativeZero(S, x) then
|
|
254
|
+
return false;
|
|
255
|
+
fi;
|
|
256
|
+
|
|
257
|
+
elts := ShallowCopy(Idempotents(S));
|
|
258
|
+
SortBy(elts, ActionRank(S));
|
|
259
|
+
leq := NaturalLeqInverseSemigroup(S);
|
|
260
|
+
|
|
261
|
+
y := LeftOne(x);
|
|
262
|
+
i := Position(elts, y);
|
|
263
|
+
|
|
264
|
+
# Find an element smaller than y, k
|
|
265
|
+
k := First([i - 1, i - 2 .. 1], j -> leq(elts[j], elts[i]));
|
|
266
|
+
|
|
267
|
+
# If there is no smaller element k: true
|
|
268
|
+
if k = fail then
|
|
269
|
+
return true;
|
|
270
|
+
fi;
|
|
271
|
+
|
|
272
|
+
# Look for other elements smaller than y which are not smaller than k
|
|
273
|
+
j := First([1 .. k - 1], j -> leq(elts[j], elts[i])
|
|
274
|
+
and not leq(elts[j], elts[k]));
|
|
275
|
+
|
|
276
|
+
if j = fail then
|
|
277
|
+
return true;
|
|
278
|
+
elif Size(HClassNC(S, y)) = 1 then
|
|
279
|
+
return false;
|
|
280
|
+
fi;
|
|
281
|
+
|
|
282
|
+
sup := SupremumIdempotentsNC(Minorants(S, y), x);
|
|
283
|
+
|
|
284
|
+
return y <> sup and ForAny(HClassNC(S, y), x -> leq(sup, x) and x <> y);
|
|
285
|
+
end);
|
|
286
|
+
|
|
287
|
+
# same method for ideals
|
|
288
|
+
|
|
289
|
+
InstallMethod(IsMajorantlyClosed,
|
|
290
|
+
"for inverse semigroup with inverse op and inverse semigroup with inverse op",
|
|
291
|
+
[IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
|
|
292
|
+
IsInverseSemigroup and IsGeneratorsOfInverseSemigroup],
|
|
293
|
+
function(S, T)
|
|
294
|
+
if not IsSubsemigroup(S, T) then
|
|
295
|
+
ErrorNoReturn("the 2nd argument (an inverse semigroup) is not a",
|
|
296
|
+
" subsemigroup of the 1st argument (an inverse semigroup)");
|
|
297
|
+
fi;
|
|
298
|
+
return IsMajorantlyClosedNC(S, Elements(T));
|
|
299
|
+
end);
|
|
300
|
+
|
|
301
|
+
# same method for ideals
|
|
302
|
+
|
|
303
|
+
InstallMethod(IsMajorantlyClosed,
|
|
304
|
+
"for an inverse semigroup with inverse op and mult. element collection",
|
|
305
|
+
[IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
|
|
306
|
+
IsMultiplicativeElementCollection],
|
|
307
|
+
function(S, T)
|
|
308
|
+
if not IsSubset(S, T) then
|
|
309
|
+
ErrorNoReturn("the 2nd argument (a mult. elt. coll) is not a ",
|
|
310
|
+
"subset of the 1st argument (an inverse semigroup)");
|
|
311
|
+
fi;
|
|
312
|
+
return IsMajorantlyClosedNC(S, T);
|
|
313
|
+
end);
|
|
314
|
+
|
|
315
|
+
# same method for ideals
|
|
316
|
+
|
|
317
|
+
InstallMethod(IsMajorantlyClosedNC,
|
|
318
|
+
"for an inverse semigroup with inverse op and mult. element collection",
|
|
319
|
+
[IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
|
|
320
|
+
IsMultiplicativeElementCollection],
|
|
321
|
+
function(S, T)
|
|
322
|
+
local leq, t, iter, u;
|
|
323
|
+
|
|
324
|
+
if Size(S) = Size(T) then
|
|
325
|
+
return true;
|
|
326
|
+
fi;
|
|
327
|
+
|
|
328
|
+
leq := NaturalLeqInverseSemigroup(S);
|
|
329
|
+
for t in T do
|
|
330
|
+
iter := Iterator(S);
|
|
331
|
+
for u in iter do
|
|
332
|
+
if leq(t, u) and not u in T then
|
|
333
|
+
return false;
|
|
334
|
+
fi;
|
|
335
|
+
od;
|
|
336
|
+
od;
|
|
337
|
+
return true;
|
|
338
|
+
end);
|
|
339
|
+
|
|
340
|
+
# same method for ideals
|
|
341
|
+
|
|
342
|
+
InstallMethod(JoinIrreducibleDClasses,
|
|
343
|
+
"for an inverse semigroup of partial permutations",
|
|
344
|
+
[IsInverseSemigroup and IsPartialPermSemigroup],
|
|
345
|
+
function(S)
|
|
346
|
+
local D, elts, out, seen_zero, rep, i, leq, k, minorants, singleline, h, mov,
|
|
347
|
+
d, j, p;
|
|
348
|
+
|
|
349
|
+
D := GreensDClasses(S);
|
|
350
|
+
elts := Set(Idempotents(S));
|
|
351
|
+
out := EmptyPlist(Length(D));
|
|
352
|
+
seen_zero := false;
|
|
353
|
+
|
|
354
|
+
for d in D do
|
|
355
|
+
rep := LeftOne(Representative(d));
|
|
356
|
+
|
|
357
|
+
if not seen_zero and IsMultiplicativeZero(S, rep) then
|
|
358
|
+
seen_zero := true;
|
|
359
|
+
continue;
|
|
360
|
+
fi;
|
|
361
|
+
|
|
362
|
+
i := Position(elts, rep);
|
|
363
|
+
leq := NaturalLeqInverseSemigroup(S);
|
|
364
|
+
k := First([i - 1, i - 2 .. 1], j -> leq(elts[j], rep));
|
|
365
|
+
|
|
366
|
+
if k = fail then # d is the minimal non-trivial D-class
|
|
367
|
+
# WW what do I mean by 'non-trivial' here?
|
|
368
|
+
Add(out, d);
|
|
369
|
+
continue;
|
|
370
|
+
fi;
|
|
371
|
+
|
|
372
|
+
minorants := [k];
|
|
373
|
+
singleline := true;
|
|
374
|
+
|
|
375
|
+
if IsActingSemigroup(S) then
|
|
376
|
+
h := SchutzenbergerGroup(d);
|
|
377
|
+
else
|
|
378
|
+
h := GroupHClass(d);
|
|
379
|
+
fi;
|
|
380
|
+
|
|
381
|
+
for j in [1 .. k - 1] do
|
|
382
|
+
if leq(elts[j], rep) then
|
|
383
|
+
if singleline and not leq(elts[j], elts[k]) then
|
|
384
|
+
# rep is the lub of {elts[j], elts[k]}, not quite
|
|
385
|
+
singleline := false;
|
|
386
|
+
if IsTrivial(h) then
|
|
387
|
+
break;
|
|
388
|
+
fi;
|
|
389
|
+
else
|
|
390
|
+
Add(minorants, j);
|
|
391
|
+
fi;
|
|
392
|
+
fi;
|
|
393
|
+
od;
|
|
394
|
+
|
|
395
|
+
if singleline then
|
|
396
|
+
Add(out, d);
|
|
397
|
+
continue;
|
|
398
|
+
elif IsTrivial(h) then
|
|
399
|
+
continue;
|
|
400
|
+
fi;
|
|
401
|
+
|
|
402
|
+
minorants := Union(List(minorants, j -> DomainOfPartialPerm(elts[j])));
|
|
403
|
+
|
|
404
|
+
if DomainOfPartialPerm(rep) = minorants then
|
|
405
|
+
# rep=lub(minorants) but rep not in minorants
|
|
406
|
+
continue;
|
|
407
|
+
fi;
|
|
408
|
+
|
|
409
|
+
for p in h do
|
|
410
|
+
mov := MovedPoints(p);
|
|
411
|
+
if not IsEmpty(mov) and ForAll(mov, x -> not x in minorants) then
|
|
412
|
+
# rep * p <> rep and rep, rep * p > lub(minorants) and rep || rep * p
|
|
413
|
+
# and hence neither rep * p nor rep is of any set.
|
|
414
|
+
Add(out, d);
|
|
415
|
+
break;
|
|
416
|
+
fi;
|
|
417
|
+
od;
|
|
418
|
+
od;
|
|
419
|
+
|
|
420
|
+
return out;
|
|
421
|
+
end);
|
|
422
|
+
|
|
423
|
+
# same method for ideals
|
|
424
|
+
|
|
425
|
+
InstallMethod(JoinIrreducibleDClasses,
|
|
426
|
+
"for inverse semigroup with inverse op",
|
|
427
|
+
[IsInverseSemigroup and IsGeneratorsOfInverseSemigroup],
|
|
428
|
+
function(S)
|
|
429
|
+
return Filtered(GreensDClasses(S),
|
|
430
|
+
x -> IsJoinIrreducible(S, Representative(x)));
|
|
431
|
+
end);
|
|
432
|
+
|
|
433
|
+
# same method for ideals
|
|
434
|
+
|
|
435
|
+
InstallMethod(MajorantClosure,
|
|
436
|
+
"for inverse semigroup with inverse op and semigroup",
|
|
437
|
+
[IsInverseSemigroup and IsGeneratorsOfInverseSemigroup, IsSemigroup],
|
|
438
|
+
function(S, T)
|
|
439
|
+
if not IsSubsemigroup(S, T) then
|
|
440
|
+
ErrorNoReturn("the 2nd argument (a semigroup) is not a subset ",
|
|
441
|
+
"of the 1st argument (an inverse semigroup)");
|
|
442
|
+
fi;
|
|
443
|
+
return MajorantClosureNC(S, Elements(T));
|
|
444
|
+
end);
|
|
445
|
+
|
|
446
|
+
# same method for ideals
|
|
447
|
+
|
|
448
|
+
InstallMethod(MajorantClosure,
|
|
449
|
+
"for an inverse semigroup with inverse op and mult. element collection",
|
|
450
|
+
[IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
|
|
451
|
+
IsMultiplicativeElementCollection],
|
|
452
|
+
function(S, T)
|
|
453
|
+
if not IsSubset(S, T) then
|
|
454
|
+
ErrorNoReturn("the 2nd argument (a mult. elt. coll.) is not a subset",
|
|
455
|
+
" of the 1st argument (an inverse semigroup)");
|
|
456
|
+
fi;
|
|
457
|
+
return MajorantClosureNC(S, T);
|
|
458
|
+
end);
|
|
459
|
+
|
|
460
|
+
# same method for ideals
|
|
461
|
+
|
|
462
|
+
InstallMethod(MajorantClosureNC,
|
|
463
|
+
"for an inverse semigroup with inverse op and mult. element collection",
|
|
464
|
+
[IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
|
|
465
|
+
IsMultiplicativeElementCollection],
|
|
466
|
+
function(S, T)
|
|
467
|
+
local elts, n, out, ht, k, leq, val, t, i;
|
|
468
|
+
|
|
469
|
+
elts := Elements(S);
|
|
470
|
+
n := Length(elts);
|
|
471
|
+
out := EmptyPlist(n);
|
|
472
|
+
ht := HTCreate(T[1]);
|
|
473
|
+
k := 0;
|
|
474
|
+
|
|
475
|
+
for t in T do
|
|
476
|
+
HTAdd(ht, t, true);
|
|
477
|
+
Add(out, t);
|
|
478
|
+
k := k + 1;
|
|
479
|
+
od;
|
|
480
|
+
leq := NaturalLeqInverseSemigroup(S);
|
|
481
|
+
for t in out do
|
|
482
|
+
for i in [1 .. n] do
|
|
483
|
+
if leq(t, elts[i]) then
|
|
484
|
+
val := HTValue(ht, elts[i]);
|
|
485
|
+
if val = fail then
|
|
486
|
+
k := k + 1;
|
|
487
|
+
Add(out, elts[i]);
|
|
488
|
+
HTAdd(ht, elts[i], true);
|
|
489
|
+
if k = Size(S) then
|
|
490
|
+
return out;
|
|
491
|
+
fi;
|
|
492
|
+
fi;
|
|
493
|
+
fi;
|
|
494
|
+
od;
|
|
495
|
+
od;
|
|
496
|
+
return out;
|
|
497
|
+
end);
|
|
498
|
+
|
|
499
|
+
# same method for ideals
|
|
500
|
+
|
|
501
|
+
InstallMethod(Minorants,
|
|
502
|
+
"for an inverse semigroup and multiplicative element",
|
|
503
|
+
[IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
|
|
504
|
+
IsMultiplicativeElement],
|
|
505
|
+
function(S, f)
|
|
506
|
+
local elts, i, out, rank, j, leq, k;
|
|
507
|
+
|
|
508
|
+
if not f in S then
|
|
509
|
+
ErrorNoReturn("the 2nd argument (a mult. elt.) is not an element of ",
|
|
510
|
+
"the 1st argument (an inverse semigroup)");
|
|
511
|
+
fi;
|
|
512
|
+
|
|
513
|
+
if HasNaturalPartialOrder(S) then
|
|
514
|
+
elts := Elements(S);
|
|
515
|
+
i := Position(elts, f);
|
|
516
|
+
return elts{NaturalPartialOrder(S)[i]};
|
|
517
|
+
fi;
|
|
518
|
+
|
|
519
|
+
# Always true if S is a D-class rep of an inverse sgp
|
|
520
|
+
if IsIdempotent(f) then
|
|
521
|
+
out := EmptyPlist(NrIdempotents(S));
|
|
522
|
+
elts := ShallowCopy(Idempotents(S));
|
|
523
|
+
else
|
|
524
|
+
out := EmptyPlist(Size(S));
|
|
525
|
+
elts := ShallowCopy(Elements(S));
|
|
526
|
+
fi;
|
|
527
|
+
|
|
528
|
+
# Minorants always have lesser rank.
|
|
529
|
+
# If we sort the elts by rank then we can cut down our search space
|
|
530
|
+
if IsActingSemigroup(S) then
|
|
531
|
+
rank := ActionRank(S);
|
|
532
|
+
SortBy(elts, rank);
|
|
533
|
+
else
|
|
534
|
+
rank := {x, y} -> IsGreensDGreaterThanFunc(S)(y, x);
|
|
535
|
+
Sort(elts, rank);
|
|
536
|
+
fi;
|
|
537
|
+
|
|
538
|
+
i := Position(elts, f);
|
|
539
|
+
j := 0;
|
|
540
|
+
leq := NaturalLeqInverseSemigroup(S);
|
|
541
|
+
for k in [1 .. i - 1] do
|
|
542
|
+
if leq(elts[k], f) and f <> elts[k] then
|
|
543
|
+
j := j + 1;
|
|
544
|
+
out[j] := elts[k];
|
|
545
|
+
fi;
|
|
546
|
+
od;
|
|
547
|
+
ShrinkAllocationPlist(out);
|
|
548
|
+
return out;
|
|
549
|
+
end);
|
|
550
|
+
|
|
551
|
+
# same method for ideals
|
|
552
|
+
# TODO(later): rename this RightCosets
|
|
553
|
+
|
|
554
|
+
InstallMethod(RightCosetsOfInverseSemigroup,
|
|
555
|
+
"for inverse semigroup and inverse semigroup",
|
|
556
|
+
[IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
|
|
557
|
+
IsInverseSemigroup and IsGeneratorsOfInverseSemigroup],
|
|
558
|
+
function(S, T)
|
|
559
|
+
local elts, min, usedreps, out, coset, s, t;
|
|
560
|
+
|
|
561
|
+
if not IsSubsemigroup(S, T) then
|
|
562
|
+
ErrorNoReturn("the 2nd argument (an inverse semigroup) must be ",
|
|
563
|
+
"a subsemigroup of the 1st argument (an inverse ",
|
|
564
|
+
"semigroup)");
|
|
565
|
+
fi;
|
|
566
|
+
|
|
567
|
+
elts := Elements(T);
|
|
568
|
+
|
|
569
|
+
if not IsMajorantlyClosedNC(S, elts) then
|
|
570
|
+
ErrorNoReturn("the 2nd argument (an inverse semigroup) must be ",
|
|
571
|
+
"majorantly closed");
|
|
572
|
+
fi;
|
|
573
|
+
|
|
574
|
+
min := RepresentativeOfMinimalIdeal(T);
|
|
575
|
+
usedreps := [];
|
|
576
|
+
out := [];
|
|
577
|
+
|
|
578
|
+
for s in RClass(S, min) do
|
|
579
|
+
|
|
580
|
+
# Check if Ts is a duplicate coset
|
|
581
|
+
if not ForAny(usedreps, x -> s * x ^ -1 in elts) then
|
|
582
|
+
Add(usedreps, s);
|
|
583
|
+
|
|
584
|
+
coset := [];
|
|
585
|
+
for t in elts do
|
|
586
|
+
Add(coset, t * s);
|
|
587
|
+
od;
|
|
588
|
+
coset := Set(coset);
|
|
589
|
+
|
|
590
|
+
# Generate the majorant closure of Ts to create the coset
|
|
591
|
+
|
|
592
|
+
coset := MajorantClosureNC(S, coset);
|
|
593
|
+
Add(out, coset);
|
|
594
|
+
fi;
|
|
595
|
+
od;
|
|
596
|
+
|
|
597
|
+
return out;
|
|
598
|
+
end);
|
|
599
|
+
|
|
600
|
+
# same method for ideals
|
|
601
|
+
|
|
602
|
+
InstallMethod(SameMinorantsSubgroup,
|
|
603
|
+
"for a group H-class of an inverse semigroup with inverse op",
|
|
604
|
+
[IsGroupHClass],
|
|
605
|
+
function(H)
|
|
606
|
+
local S, e, F, out, x, leq;
|
|
607
|
+
|
|
608
|
+
S := Parent(H);
|
|
609
|
+
|
|
610
|
+
if not IsGeneratorsOfInverseSemigroup(S) then
|
|
611
|
+
ErrorNoReturn("the parent of the argument (a group H-class)",
|
|
612
|
+
" must be an inverse semigroup");
|
|
613
|
+
fi;
|
|
614
|
+
|
|
615
|
+
e := Representative(H);
|
|
616
|
+
F := Minorants(S, e);
|
|
617
|
+
out := [];
|
|
618
|
+
leq := NaturalLeqInverseSemigroup(S);
|
|
619
|
+
for x in H do
|
|
620
|
+
if x = e or ForAll(F, f -> leq(f, x)) then
|
|
621
|
+
Add(out, x);
|
|
622
|
+
fi;
|
|
623
|
+
od;
|
|
624
|
+
return out;
|
|
625
|
+
end);
|
|
626
|
+
|
|
627
|
+
InstallGlobalFunction(SupremumIdempotentsNC,
|
|
628
|
+
function(coll, x)
|
|
629
|
+
local dom, i, part, rep, reps, out, todo, inter;
|
|
630
|
+
|
|
631
|
+
if IsPartialPerm(x) then
|
|
632
|
+
|
|
633
|
+
if IsList(coll) and IsEmpty(coll) then
|
|
634
|
+
return PartialPerm([]);
|
|
635
|
+
fi;
|
|
636
|
+
dom := DomainOfPartialPermCollection(coll);
|
|
637
|
+
return PartialPerm(dom, dom);
|
|
638
|
+
|
|
639
|
+
elif IsBipartition(x) and IsBlockBijection(x) then
|
|
640
|
+
|
|
641
|
+
if IsList(coll) and IsEmpty(coll) then
|
|
642
|
+
return Bipartition([Concatenation([1 .. DegreeOfBipartition(x)],
|
|
643
|
+
-[1 .. DegreeOfBipartition(x)])]);
|
|
644
|
+
fi;
|
|
645
|
+
|
|
646
|
+
reps := List(coll, ExtRepOfObj);
|
|
647
|
+
todo := [1 .. DegreeOfBipartition(x)];
|
|
648
|
+
out := [];
|
|
649
|
+
for i in todo do
|
|
650
|
+
inter := [];
|
|
651
|
+
for rep in reps do
|
|
652
|
+
for part in rep do
|
|
653
|
+
if i in part then
|
|
654
|
+
Add(inter, part);
|
|
655
|
+
break;
|
|
656
|
+
fi;
|
|
657
|
+
od;
|
|
658
|
+
od;
|
|
659
|
+
inter := Intersection(inter);
|
|
660
|
+
AddSet(out, inter);
|
|
661
|
+
todo := Difference(todo, inter);
|
|
662
|
+
od;
|
|
663
|
+
return Bipartition(out);
|
|
664
|
+
|
|
665
|
+
elif IsBipartition(x) and IsPartialPermBipartition(x) then
|
|
666
|
+
# TODO(later) shouldn't there be a check here like above?
|
|
667
|
+
return AsBipartition(SupremumIdempotentsNC(
|
|
668
|
+
List(coll, AsPartialPerm), PartialPerm([])),
|
|
669
|
+
DegreeOfBipartition(x));
|
|
670
|
+
fi;
|
|
671
|
+
ErrorNoReturn("the argument is not a collection of partial perms, block ",
|
|
672
|
+
"bijections, or partial perm bipartitions");
|
|
673
|
+
end);
|
|
674
|
+
|
|
675
|
+
# same method for ideals
|
|
676
|
+
|
|
677
|
+
InstallMethod(VagnerPrestonRepresentation,
|
|
678
|
+
"for an inverse semigroup with inverse op",
|
|
679
|
+
[IsInverseSemigroup and IsGeneratorsOfInverseSemigroup],
|
|
680
|
+
function(S)
|
|
681
|
+
local gens, elts, out, iso, T, inv, i;
|
|
682
|
+
|
|
683
|
+
gens := GeneratorsOfSemigroup(S);
|
|
684
|
+
elts := Elements(S);
|
|
685
|
+
out := EmptyPlist(Length(gens));
|
|
686
|
+
|
|
687
|
+
iso := function(x)
|
|
688
|
+
local dom;
|
|
689
|
+
dom := Set(elts * (x ^ -1));
|
|
690
|
+
return PartialPerm(List(dom, y -> Position(elts, y)),
|
|
691
|
+
List(List(dom, y -> y * x), y -> Position(elts, y)));
|
|
692
|
+
end;
|
|
693
|
+
|
|
694
|
+
for i in [1 .. Length(gens)] do
|
|
695
|
+
out[i] := iso(gens[i]);
|
|
696
|
+
od;
|
|
697
|
+
|
|
698
|
+
T := InverseSemigroup(out);
|
|
699
|
+
inv := x -> EvaluateWord(GeneratorsOfSemigroup(S), Factorization(T, x));
|
|
700
|
+
|
|
701
|
+
return SemigroupIsomorphismByFunctionNC(S, T, iso, inv);
|
|
702
|
+
end);
|
|
703
|
+
|
|
704
|
+
InstallMethod(InversesOfSemigroupElementNC,
|
|
705
|
+
"for an inverse semigroup and a multiplicative element",
|
|
706
|
+
[IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
|
|
707
|
+
IsMultiplicativeElement], SUM_FLAGS,
|
|
708
|
+
{_, elm} -> [elm ^ -1]);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## attributes/isomorph.gd
|
|
4
|
+
## Copyright (C) 2014-2022 James D. Mitchell
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
DeclareOperation("IsomorphismSemigroups", [IsSemigroup, IsSemigroup]);
|
|
12
|
+
DeclareAttribute("SmallestMultiplicationTable", IsSemigroup);
|
|
13
|
+
DeclareAttribute("CanonicalMultiplicationTable", IsSemigroup);
|
|
14
|
+
DeclareAttribute("CanonicalMultiplicationTablePerm", IsSemigroup);
|
|
15
|
+
DeclareOperation("OnMultiplicationTable", [IsRectangularTable, IsPerm]);
|
|
16
|
+
DeclareOperation("IsIsomorphicSemigroup", [IsSemigroup, IsSemigroup]);
|