passagemath-gap-pkg-semigroups 10.6.30__cp312-abi3-macosx_13_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 +1158 -0
- gap/pkg/semigroups/config.status +1131 -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.30.dist-info/METADATA +93 -0
- passagemath_gap_pkg_semigroups-10.6.30.dist-info/METADATA.bak +94 -0
- passagemath_gap_pkg_semigroups-10.6.30.dist-info/RECORD +354 -0
- passagemath_gap_pkg_semigroups-10.6.30.dist-info/WHEEL +6 -0
- passagemath_gap_pkg_semigroups-10.6.30.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,710 @@
|
|
|
1
|
+
############################################################################
|
|
2
|
+
##
|
|
3
|
+
## semigroups/semimaxplus.gi
|
|
4
|
+
## Copyright (C) 2015-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 implementations for semigroups of max-plus, min-plus,
|
|
12
|
+
# tropical max-plus, and tropical min-plus matrices.
|
|
13
|
+
|
|
14
|
+
#############################################################################
|
|
15
|
+
## Random inverse semigroups and monoids, no better method currently
|
|
16
|
+
#############################################################################
|
|
17
|
+
|
|
18
|
+
for _IsXMatrix in ["IsMaxPlusMatrix",
|
|
19
|
+
"IsMinPlusMatrix",
|
|
20
|
+
"IsTropicalMaxPlusMatrix",
|
|
21
|
+
"IsTropicalMinPlusMatrix",
|
|
22
|
+
"IsProjectiveMaxPlusMatrix",
|
|
23
|
+
"IsNTPMatrix",
|
|
24
|
+
"IsIntegerMatrix"] do
|
|
25
|
+
|
|
26
|
+
_IsXSemigroup := Concatenation(_IsXMatrix, "Semigroup");
|
|
27
|
+
_IsXMonoid := Concatenation(_IsXMatrix, "Monoid");
|
|
28
|
+
|
|
29
|
+
InstallMethod(RandomInverseSemigroupCons,
|
|
30
|
+
Concatenation("for ", _IsXSemigroup, " and a list"),
|
|
31
|
+
[ValueGlobal(_IsXSemigroup), IsList],
|
|
32
|
+
SEMIGROUPS.DefaultRandomInverseSemigroup);
|
|
33
|
+
|
|
34
|
+
InstallMethod(RandomInverseMonoidCons,
|
|
35
|
+
Concatenation("for ", _IsXMonoid, " and a list"),
|
|
36
|
+
[ValueGlobal(_IsXMonoid), IsList],
|
|
37
|
+
SEMIGROUPS.DefaultRandomInverseMonoid);
|
|
38
|
+
|
|
39
|
+
od;
|
|
40
|
+
|
|
41
|
+
Unbind(_IsXMatrix);
|
|
42
|
+
Unbind(_IsXMonoid);
|
|
43
|
+
Unbind(_IsXSemigroup);
|
|
44
|
+
|
|
45
|
+
#############################################################################
|
|
46
|
+
## Random for matrices with 0 additional parameters
|
|
47
|
+
#############################################################################
|
|
48
|
+
|
|
49
|
+
_InstallRandom0 := function(params)
|
|
50
|
+
local IsXMatrix, FilterPlaceHolder, IsXSemigroup, IsXMonoid;
|
|
51
|
+
|
|
52
|
+
if not IsString(params) then
|
|
53
|
+
IsXMatrix := params[1];
|
|
54
|
+
FilterPlaceHolder := params[2];
|
|
55
|
+
else
|
|
56
|
+
IsXMatrix := params;
|
|
57
|
+
FilterPlaceHolder := params;
|
|
58
|
+
fi;
|
|
59
|
+
|
|
60
|
+
IsXSemigroup := Concatenation(IsXMatrix, "Semigroup");
|
|
61
|
+
IsXMonoid := Concatenation(IsXMatrix, "Monoid");
|
|
62
|
+
|
|
63
|
+
InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
|
|
64
|
+
[ValueGlobal(IsXSemigroup), IsList],
|
|
65
|
+
{_, params} -> SEMIGROUPS_ProcessRandomArgsCons(IsSemigroup, params));
|
|
66
|
+
|
|
67
|
+
InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
|
|
68
|
+
[ValueGlobal(IsXMonoid), IsList],
|
|
69
|
+
{_, params} -> SEMIGROUPS_ProcessRandomArgsCons(IsSemigroup, params));
|
|
70
|
+
|
|
71
|
+
InstallMethod(RandomSemigroupCons,
|
|
72
|
+
Concatenation("for ", IsXSemigroup, " and a list"),
|
|
73
|
+
[ValueGlobal(IsXSemigroup), IsList],
|
|
74
|
+
function(_, params)
|
|
75
|
+
return Semigroup(List([1 .. params[1]],
|
|
76
|
+
i -> RandomMatrix(ValueGlobal(FilterPlaceHolder),
|
|
77
|
+
params[2])));
|
|
78
|
+
end);
|
|
79
|
+
|
|
80
|
+
InstallMethod(RandomMonoidCons,
|
|
81
|
+
Concatenation("for ", IsXMonoid, " and a list"),
|
|
82
|
+
[ValueGlobal(IsXMonoid), IsList],
|
|
83
|
+
function(_, params)
|
|
84
|
+
return Monoid(List([1 .. params[1]],
|
|
85
|
+
i -> RandomMatrix(ValueGlobal(FilterPlaceHolder),
|
|
86
|
+
params[2])));
|
|
87
|
+
end);
|
|
88
|
+
end;
|
|
89
|
+
|
|
90
|
+
for _IsXMatrix in ["IsMaxPlusMatrix",
|
|
91
|
+
"IsMinPlusMatrix",
|
|
92
|
+
["IsIntegerMatrix", "Integers"],
|
|
93
|
+
"IsProjectiveMaxPlusMatrix"] do
|
|
94
|
+
_InstallRandom0(_IsXMatrix);
|
|
95
|
+
od;
|
|
96
|
+
|
|
97
|
+
Unbind(_IsXMatrix);
|
|
98
|
+
Unbind(_InstallRandom0);
|
|
99
|
+
|
|
100
|
+
#############################################################################
|
|
101
|
+
## Random for matrices with 1 additional parameters
|
|
102
|
+
#############################################################################
|
|
103
|
+
|
|
104
|
+
_ProcessArgs1 := function(_, params)
|
|
105
|
+
if Length(params) < 1 then # nr gens
|
|
106
|
+
params[1] := Random(1, 20);
|
|
107
|
+
elif not IsPosInt(params[1]) then
|
|
108
|
+
return "the 2nd argument (number of generators) must be a pos int";
|
|
109
|
+
fi;
|
|
110
|
+
|
|
111
|
+
if Length(params) < 2 then # degree / dimension
|
|
112
|
+
params[2] := Random(1, 20);
|
|
113
|
+
fi;
|
|
114
|
+
|
|
115
|
+
if not IsPosInt(params[2]) then
|
|
116
|
+
return "the 3rd argument (matrix dimension) must be a pos int";
|
|
117
|
+
elif Length(params) < 3 then # threshold
|
|
118
|
+
params[3] := Random(1, 20);
|
|
119
|
+
fi;
|
|
120
|
+
|
|
121
|
+
if not IsPosInt(params[3]) then
|
|
122
|
+
return "the 4th argument (semiring threshold) must be a pos int";
|
|
123
|
+
elif Length(params) > 3 then
|
|
124
|
+
return "there must be at most four arguments";
|
|
125
|
+
fi;
|
|
126
|
+
return params;
|
|
127
|
+
end;
|
|
128
|
+
|
|
129
|
+
_InstallRandom1 := function(IsXMatrix)
|
|
130
|
+
local IsXSemigroup, IsXMonoid;
|
|
131
|
+
|
|
132
|
+
IsXSemigroup := Concatenation(IsXMatrix, "Semigroup");
|
|
133
|
+
IsXMonoid := Concatenation(IsXMatrix, "Monoid");
|
|
134
|
+
|
|
135
|
+
InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
|
|
136
|
+
[ValueGlobal(IsXSemigroup), IsList], _ProcessArgs1);
|
|
137
|
+
|
|
138
|
+
InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
|
|
139
|
+
[ValueGlobal(IsXMonoid), IsList], _ProcessArgs1);
|
|
140
|
+
|
|
141
|
+
InstallMethod(RandomSemigroupCons,
|
|
142
|
+
Concatenation("for ", IsXSemigroup, " and a list"),
|
|
143
|
+
[ValueGlobal(IsXSemigroup), IsList],
|
|
144
|
+
function(_, params)
|
|
145
|
+
return Semigroup(List([1 .. params[1]],
|
|
146
|
+
i -> RandomMatrix(ValueGlobal(IsXMatrix),
|
|
147
|
+
params[2],
|
|
148
|
+
params[3])));
|
|
149
|
+
end);
|
|
150
|
+
|
|
151
|
+
InstallMethod(RandomMonoidCons,
|
|
152
|
+
Concatenation("for ", IsXMonoid, " and a list"),
|
|
153
|
+
[ValueGlobal(IsXMonoid), IsList],
|
|
154
|
+
function(_, params)
|
|
155
|
+
return Monoid(List([1 .. params[1]],
|
|
156
|
+
i -> RandomMatrix(ValueGlobal(IsXMatrix),
|
|
157
|
+
params[2],
|
|
158
|
+
params[3])));
|
|
159
|
+
end);
|
|
160
|
+
end;
|
|
161
|
+
|
|
162
|
+
for _IsXMatrix in ["IsTropicalMaxPlusMatrix",
|
|
163
|
+
"IsTropicalMinPlusMatrix"] do
|
|
164
|
+
_InstallRandom1(_IsXMatrix);
|
|
165
|
+
od;
|
|
166
|
+
|
|
167
|
+
Unbind(_IsXMatrix);
|
|
168
|
+
Unbind(_InstallRandom1);
|
|
169
|
+
Unbind(_ProcessArgs1);
|
|
170
|
+
|
|
171
|
+
#############################################################################
|
|
172
|
+
## Random for matrices with 2 additional parameters
|
|
173
|
+
#############################################################################
|
|
174
|
+
|
|
175
|
+
InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
|
|
176
|
+
[IsNTPMatrixSemigroup, IsList],
|
|
177
|
+
function(_, params)
|
|
178
|
+
if Length(params) < 1 then # nr gens
|
|
179
|
+
params[1] := Random(1, 20);
|
|
180
|
+
elif not IsPosInt(params[1]) then
|
|
181
|
+
return "the 2nd argument (number of generators) must be a pos int";
|
|
182
|
+
fi;
|
|
183
|
+
if Length(params) < 2 then # dimension
|
|
184
|
+
params[2] := Random(1, 20);
|
|
185
|
+
elif not IsPosInt(params[2]) then
|
|
186
|
+
return "the 3rd argument (matrix dimension) must be a pos int";
|
|
187
|
+
fi;
|
|
188
|
+
if Length(params) < 3 then # threshold
|
|
189
|
+
params[3] := Random(1, 20);
|
|
190
|
+
elif not IsPosInt(params[3]) then
|
|
191
|
+
return "the 4th argument (semiring threshold) must be a pos int";
|
|
192
|
+
fi;
|
|
193
|
+
if Length(params) < 4 then # period
|
|
194
|
+
params[4] := Random(1, 20);
|
|
195
|
+
elif not IsPosInt(params[4]) then
|
|
196
|
+
return "the 5th argument (semiring period) must be a pos int";
|
|
197
|
+
fi;
|
|
198
|
+
if Length(params) > 4 then
|
|
199
|
+
return "there must be at most 5 arguments";
|
|
200
|
+
fi;
|
|
201
|
+
|
|
202
|
+
return params;
|
|
203
|
+
end);
|
|
204
|
+
|
|
205
|
+
InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
|
|
206
|
+
[IsNTPMatrixMonoid, IsList], {filt, params}
|
|
207
|
+
-> SEMIGROUPS_ProcessRandomArgsCons(IsNTPMatrixSemigroup, params));
|
|
208
|
+
|
|
209
|
+
InstallMethod(RandomSemigroupCons,
|
|
210
|
+
"for IsNTPMatrixSemigroup and a list",
|
|
211
|
+
[IsNTPMatrixSemigroup, IsList],
|
|
212
|
+
function(_, params)
|
|
213
|
+
return Semigroup(List([1 .. params[1]],
|
|
214
|
+
i -> RandomMatrix(IsNTPMatrix,
|
|
215
|
+
params[2],
|
|
216
|
+
params[3],
|
|
217
|
+
params[4])));
|
|
218
|
+
end);
|
|
219
|
+
|
|
220
|
+
InstallMethod(RandomMonoidCons,
|
|
221
|
+
"for IsNTPMatrixMonoid and a list",
|
|
222
|
+
[IsNTPMatrixMonoid, IsList],
|
|
223
|
+
function(_, params)
|
|
224
|
+
return Monoid(List([1 .. params[1]],
|
|
225
|
+
i -> RandomMatrix(IsNTPMatrix,
|
|
226
|
+
params[2],
|
|
227
|
+
params[3],
|
|
228
|
+
params[4])));
|
|
229
|
+
end);
|
|
230
|
+
|
|
231
|
+
#############################################################################
|
|
232
|
+
## 1. Isomorphisms
|
|
233
|
+
#############################################################################
|
|
234
|
+
|
|
235
|
+
#############################################################################
|
|
236
|
+
## Isomorphism from an arbitrary semigroup to a matrix semigroup, via a
|
|
237
|
+
## transformation semigroup
|
|
238
|
+
#############################################################################
|
|
239
|
+
|
|
240
|
+
# 0 additional parameters
|
|
241
|
+
|
|
242
|
+
for _IsXMatrix in ["IsMaxPlusMatrix",
|
|
243
|
+
"IsMinPlusMatrix",
|
|
244
|
+
"IsIntegerMatrix",
|
|
245
|
+
"IsProjectiveMaxPlusMatrix"] do
|
|
246
|
+
|
|
247
|
+
_IsXSemigroup := Concatenation(_IsXMatrix, "Semigroup");
|
|
248
|
+
|
|
249
|
+
InstallMethod(IsomorphismSemigroup,
|
|
250
|
+
Concatenation("for ", _IsXSemigroup, " and a semigroup"),
|
|
251
|
+
[ValueGlobal(_IsXSemigroup), IsSemigroup],
|
|
252
|
+
SEMIGROUPS.DefaultIsomorphismSemigroup);
|
|
253
|
+
|
|
254
|
+
InstallMethod(IsomorphismSemigroup,
|
|
255
|
+
Concatenation("for ", _IsXSemigroup, " and a ", _IsXSemigroup),
|
|
256
|
+
[ValueGlobal(_IsXSemigroup), ValueGlobal(_IsXSemigroup)],
|
|
257
|
+
{filter, S} -> SemigroupIsomorphismByFunctionNC(S, S, IdFunc, IdFunc));
|
|
258
|
+
|
|
259
|
+
od;
|
|
260
|
+
|
|
261
|
+
Unbind(_IsXMatrix);
|
|
262
|
+
Unbind(_IsXSemigroup);
|
|
263
|
+
|
|
264
|
+
# 1 additional parameters
|
|
265
|
+
|
|
266
|
+
for _IsXMatrix in ["IsTropicalMaxPlusMatrix",
|
|
267
|
+
"IsTropicalMinPlusMatrix"] do
|
|
268
|
+
|
|
269
|
+
_IsXSemigroup := Concatenation(_IsXMatrix, "Semigroup");
|
|
270
|
+
|
|
271
|
+
InstallMethod(IsomorphismSemigroup,
|
|
272
|
+
Concatenation("for ", _IsXSemigroup, ", pos int, and a semigroup"),
|
|
273
|
+
[ValueGlobal(_IsXSemigroup), IsPosInt, IsSemigroup],
|
|
274
|
+
function(filter, threshold, S)
|
|
275
|
+
local iso1, inv1, iso2, inv2;
|
|
276
|
+
|
|
277
|
+
iso1 := IsomorphismTransformationSemigroup(S);
|
|
278
|
+
inv1 := InverseGeneralMapping(iso1);
|
|
279
|
+
iso2 := IsomorphismSemigroup(filter, threshold, Range(iso1));
|
|
280
|
+
inv2 := InverseGeneralMapping(iso2);
|
|
281
|
+
|
|
282
|
+
return SemigroupIsomorphismByFunctionNC(S,
|
|
283
|
+
Range(iso2),
|
|
284
|
+
x -> (x ^ iso1) ^ iso2,
|
|
285
|
+
x -> (x ^ inv2) ^ inv1);
|
|
286
|
+
end);
|
|
287
|
+
|
|
288
|
+
InstallMethod(IsomorphismSemigroup,
|
|
289
|
+
Concatenation("for ", _IsXSemigroup, ", and a semigroup"),
|
|
290
|
+
[ValueGlobal(_IsXSemigroup), IsSemigroup],
|
|
291
|
+
{filter, S} -> IsomorphismSemigroup(filter, 1, S));
|
|
292
|
+
|
|
293
|
+
InstallMethod(IsomorphismSemigroup,
|
|
294
|
+
Concatenation("for ", _IsXSemigroup, " and a ", _IsXSemigroup),
|
|
295
|
+
[ValueGlobal(_IsXSemigroup), IsPosInt, ValueGlobal(_IsXSemigroup)],
|
|
296
|
+
function(_, threshold, S)
|
|
297
|
+
if threshold = ThresholdTropicalMatrix(Representative(S)) then
|
|
298
|
+
return SemigroupIsomorphismByFunctionNC(S, S, IdFunc, IdFunc);
|
|
299
|
+
fi;
|
|
300
|
+
TryNextMethod();
|
|
301
|
+
end);
|
|
302
|
+
od;
|
|
303
|
+
|
|
304
|
+
Unbind(_IsXMatrix);
|
|
305
|
+
Unbind(_IsXSemigroup);
|
|
306
|
+
|
|
307
|
+
# 2 additional parameters
|
|
308
|
+
|
|
309
|
+
InstallMethod(IsomorphismSemigroup,
|
|
310
|
+
"for IsNTPMatrixSemigroup, pos int, pos int, and a semigroup",
|
|
311
|
+
[IsNTPMatrixSemigroup, IsPosInt, IsPosInt, IsSemigroup],
|
|
312
|
+
function(filter, threshold, period, S)
|
|
313
|
+
local iso1, inv1, iso2, inv2;
|
|
314
|
+
|
|
315
|
+
iso1 := IsomorphismTransformationSemigroup(S);
|
|
316
|
+
inv1 := InverseGeneralMapping(iso1);
|
|
317
|
+
iso2 := IsomorphismSemigroup(filter, threshold, period, Range(iso1));
|
|
318
|
+
inv2 := InverseGeneralMapping(iso2);
|
|
319
|
+
|
|
320
|
+
return SemigroupIsomorphismByFunctionNC(S,
|
|
321
|
+
Range(iso2),
|
|
322
|
+
x -> (x ^ iso1) ^ iso2,
|
|
323
|
+
x -> (x ^ inv2) ^ inv1);
|
|
324
|
+
end);
|
|
325
|
+
|
|
326
|
+
InstallMethod(IsomorphismSemigroup,
|
|
327
|
+
"for IsNTPMatrixSemigroup and a semigroup",
|
|
328
|
+
[IsNTPMatrixSemigroup, IsSemigroup],
|
|
329
|
+
{filter, S} -> IsomorphismSemigroup(IsNTPMatrixSemigroup, 1, 1, S));
|
|
330
|
+
|
|
331
|
+
InstallMethod(IsomorphismSemigroup,
|
|
332
|
+
"for IsNTPMatrixSemigroup, pos int, pos int, and a semigroup",
|
|
333
|
+
[IsNTPMatrixSemigroup, IsPosInt, IsPosInt, IsNTPMatrixSemigroup],
|
|
334
|
+
function(_, threshold, period, S)
|
|
335
|
+
if threshold = ThresholdNTPMatrix(Representative(S))
|
|
336
|
+
and period = PeriodNTPMatrix(Representative(S)) then
|
|
337
|
+
return SemigroupIsomorphismByFunctionNC(S, S, IdFunc, IdFunc);
|
|
338
|
+
fi;
|
|
339
|
+
TryNextMethod();
|
|
340
|
+
end);
|
|
341
|
+
|
|
342
|
+
#############################################################################
|
|
343
|
+
## Isomorphism from a transformation semigroup to a matrix semigroup
|
|
344
|
+
## 0 additional parameters!!!
|
|
345
|
+
#############################################################################
|
|
346
|
+
|
|
347
|
+
## These are installed inside a function so that the value of IsXMatrix and
|
|
348
|
+
## IsXSemigroup are retained as local variables.
|
|
349
|
+
|
|
350
|
+
_InstallAsMonoid := function(filter)
|
|
351
|
+
local IsXSemigroup, IsXMonoid;
|
|
352
|
+
|
|
353
|
+
IsXSemigroup := Concatenation(filter, "Semigroup");
|
|
354
|
+
IsXMonoid := Concatenation(filter, "Monoid");
|
|
355
|
+
|
|
356
|
+
InstallMethod(AsMonoid,
|
|
357
|
+
Concatenation("for a semigroup in ", IsXSemigroup),
|
|
358
|
+
[ValueGlobal(IsXSemigroup)],
|
|
359
|
+
function(S)
|
|
360
|
+
if MultiplicativeNeutralElement(S) = fail then
|
|
361
|
+
return fail; # so that we do the same as the GAP/ref manual says
|
|
362
|
+
fi;
|
|
363
|
+
return Range(IsomorphismMonoid(ValueGlobal(IsXMonoid), S));
|
|
364
|
+
end);
|
|
365
|
+
end;
|
|
366
|
+
|
|
367
|
+
for _IsXMatrix in ["IsMaxPlusMatrix",
|
|
368
|
+
"IsMinPlusMatrix",
|
|
369
|
+
"IsTropicalMaxPlusMatrix",
|
|
370
|
+
"IsTropicalMinPlusMatrix",
|
|
371
|
+
"IsProjectiveMaxPlusMatrix",
|
|
372
|
+
"IsNTPMatrix",
|
|
373
|
+
"IsIntegerMatrix"] do
|
|
374
|
+
_InstallAsMonoid(_IsXMatrix);
|
|
375
|
+
od;
|
|
376
|
+
|
|
377
|
+
Unbind(_IsXMatrix);
|
|
378
|
+
Unbind(_InstallAsMonoid);
|
|
379
|
+
|
|
380
|
+
## These are installed inside a function so that the value of IsXMatrix and
|
|
381
|
+
## IsXSemigroup are retained as local variables.
|
|
382
|
+
|
|
383
|
+
_InstallIsomorphism0 := function(filter)
|
|
384
|
+
local IsXMatrix, IsXSemigroup, IsXMonoid;
|
|
385
|
+
|
|
386
|
+
IsXMatrix := filter;
|
|
387
|
+
IsXSemigroup := Concatenation(filter, "Semigroup");
|
|
388
|
+
IsXMonoid := Concatenation(filter, "Monoid");
|
|
389
|
+
|
|
390
|
+
InstallMethod(IsomorphismMonoid,
|
|
391
|
+
Concatenation("for ", IsXMonoid, " and a semigroup"),
|
|
392
|
+
[ValueGlobal(IsXMonoid), IsSemigroup],
|
|
393
|
+
SEMIGROUPS.DefaultIsomorphismMonoid);
|
|
394
|
+
|
|
395
|
+
InstallMethod(IsomorphismMonoid,
|
|
396
|
+
Concatenation("for ", IsXMonoid, " and a monoid"),
|
|
397
|
+
[ValueGlobal(IsXMonoid), IsMonoid],
|
|
398
|
+
{filter, S} -> IsomorphismSemigroup(ValueGlobal(IsXSemigroup), S));
|
|
399
|
+
|
|
400
|
+
if IsXMatrix <> "IsIntegerMatrix" then
|
|
401
|
+
InstallMethod(IsomorphismSemigroup,
|
|
402
|
+
Concatenation("for ", IsXSemigroup,
|
|
403
|
+
" and a transformation semigroup with generators"),
|
|
404
|
+
[ValueGlobal(IsXSemigroup),
|
|
405
|
+
IsTransformationSemigroup and HasGeneratorsOfSemigroup],
|
|
406
|
+
function(_, S)
|
|
407
|
+
local n, map, T;
|
|
408
|
+
|
|
409
|
+
n := Maximum(DegreeOfTransformationSemigroup(S), 1);
|
|
410
|
+
map := x -> AsMatrix(ValueGlobal(IsXMatrix), x, n);
|
|
411
|
+
T := Semigroup(List(GeneratorsOfSemigroup(S), map));
|
|
412
|
+
UseIsomorphismRelation(S, T);
|
|
413
|
+
|
|
414
|
+
return SemigroupIsomorphismByFunctionNC(S,
|
|
415
|
+
T,
|
|
416
|
+
map,
|
|
417
|
+
AsTransformation);
|
|
418
|
+
end);
|
|
419
|
+
fi;
|
|
420
|
+
end;
|
|
421
|
+
|
|
422
|
+
for _IsXMatrix in ["IsMaxPlusMatrix",
|
|
423
|
+
"IsMinPlusMatrix",
|
|
424
|
+
"IsIntegerMatrix",
|
|
425
|
+
"IsProjectiveMaxPlusMatrix"] do
|
|
426
|
+
_InstallIsomorphism0(_IsXMatrix);
|
|
427
|
+
od;
|
|
428
|
+
|
|
429
|
+
Unbind(_IsXMatrix);
|
|
430
|
+
Unbind(_InstallIsomorphism0);
|
|
431
|
+
|
|
432
|
+
#############################################################################
|
|
433
|
+
## Isomorphism from a transformation semigroup to a matrix semigroup
|
|
434
|
+
## 1 additional parameters!!!
|
|
435
|
+
#############################################################################
|
|
436
|
+
|
|
437
|
+
# These are installed inside a function so that the value of IsXMatrix and
|
|
438
|
+
# IsXSemigroup are retained as a local variables.
|
|
439
|
+
|
|
440
|
+
_InstallIsomorphism1 := function(filter)
|
|
441
|
+
local IsXMatrix, IsXSemigroup, IsXMonoid;
|
|
442
|
+
|
|
443
|
+
IsXMatrix := filter;
|
|
444
|
+
IsXSemigroup := Concatenation(filter, "Semigroup");
|
|
445
|
+
IsXMonoid := Concatenation(filter, "Monoid");
|
|
446
|
+
|
|
447
|
+
InstallMethod(IsomorphismMonoid,
|
|
448
|
+
Concatenation("for ", IsXMonoid, ", pos int, and a semigroup"),
|
|
449
|
+
[ValueGlobal(IsXMonoid), IsPosInt, IsSemigroup],
|
|
450
|
+
function(filter, threshold, S)
|
|
451
|
+
local iso1, inv1, iso2, inv2;
|
|
452
|
+
|
|
453
|
+
iso1 := IsomorphismTransformationMonoid(S);
|
|
454
|
+
inv1 := InverseGeneralMapping(iso1);
|
|
455
|
+
iso2 := IsomorphismMonoid(filter, threshold, Range(iso1));
|
|
456
|
+
inv2 := InverseGeneralMapping(iso2);
|
|
457
|
+
|
|
458
|
+
return SemigroupIsomorphismByFunctionNC(S,
|
|
459
|
+
Range(iso2),
|
|
460
|
+
x -> (x ^ iso1) ^ iso2,
|
|
461
|
+
x -> (x ^ inv2) ^ inv1);
|
|
462
|
+
end);
|
|
463
|
+
|
|
464
|
+
InstallMethod(IsomorphismMonoid,
|
|
465
|
+
Concatenation("for ", IsXMonoid, " and a semigroup"),
|
|
466
|
+
[ValueGlobal(IsXMonoid), IsSemigroup],
|
|
467
|
+
{filter, S} -> IsomorphismMonoid(filter, 1, S));
|
|
468
|
+
|
|
469
|
+
InstallMethod(IsomorphismMonoid,
|
|
470
|
+
Concatenation("for ", IsXMonoid, ", and a semigroup in ", IsXSemigroup),
|
|
471
|
+
[ValueGlobal(IsXMonoid), ValueGlobal(IsXSemigroup)],
|
|
472
|
+
function(filter, S)
|
|
473
|
+
return IsomorphismMonoid(filter,
|
|
474
|
+
ThresholdTropicalMatrix(Representative(S)),
|
|
475
|
+
S);
|
|
476
|
+
end);
|
|
477
|
+
|
|
478
|
+
InstallMethod(IsomorphismMonoid,
|
|
479
|
+
Concatenation("for ", IsXMonoid, ", pos int, and a monoid"),
|
|
480
|
+
[ValueGlobal(IsXMonoid), IsPosInt, IsMonoid],
|
|
481
|
+
{filter, threshold, S} ->
|
|
482
|
+
IsomorphismSemigroup(ValueGlobal(IsXSemigroup), threshold, S));
|
|
483
|
+
|
|
484
|
+
InstallMethod(IsomorphismSemigroup,
|
|
485
|
+
Concatenation("for ", IsXSemigroup,
|
|
486
|
+
", pos int, and a transformation semigroup with generators"),
|
|
487
|
+
[ValueGlobal(IsXSemigroup), IsPosInt,
|
|
488
|
+
IsTransformationSemigroup and HasGeneratorsOfSemigroup],
|
|
489
|
+
function(_, threshold, S)
|
|
490
|
+
local n, map, T;
|
|
491
|
+
|
|
492
|
+
n := Maximum(DegreeOfTransformationSemigroup(S), 1);
|
|
493
|
+
map := x -> AsMatrix(ValueGlobal(IsXMatrix), x, n, threshold);
|
|
494
|
+
T := Semigroup(List(GeneratorsOfSemigroup(S), map));
|
|
495
|
+
UseIsomorphismRelation(S, T);
|
|
496
|
+
|
|
497
|
+
return SemigroupIsomorphismByFunctionNC(S,
|
|
498
|
+
T,
|
|
499
|
+
map,
|
|
500
|
+
AsTransformation);
|
|
501
|
+
end);
|
|
502
|
+
|
|
503
|
+
InstallMethod(IsomorphismSemigroup,
|
|
504
|
+
Concatenation("for ", IsXSemigroup,
|
|
505
|
+
" and a transformation semigroup with generators"),
|
|
506
|
+
[ValueGlobal(IsXSemigroup),
|
|
507
|
+
IsTransformationSemigroup and HasGeneratorsOfSemigroup],
|
|
508
|
+
{filt, S} -> IsomorphismSemigroup(filt, 1, S));
|
|
509
|
+
end;
|
|
510
|
+
|
|
511
|
+
for _IsXMatrix in ["IsTropicalMaxPlusMatrix",
|
|
512
|
+
"IsTropicalMinPlusMatrix"] do
|
|
513
|
+
_InstallIsomorphism1(_IsXMatrix);
|
|
514
|
+
od;
|
|
515
|
+
|
|
516
|
+
Unbind(_IsXMatrix);
|
|
517
|
+
Unbind(_InstallIsomorphism1);
|
|
518
|
+
|
|
519
|
+
#############################################################################
|
|
520
|
+
## Isomorphism from a transformation semigroup to a matrix semigroup
|
|
521
|
+
## 2 additional parameters!!!
|
|
522
|
+
#############################################################################
|
|
523
|
+
|
|
524
|
+
InstallMethod(IsomorphismMonoid,
|
|
525
|
+
"for IsNTPMatrixMonoid, pos int, pos int, and a semigroup",
|
|
526
|
+
[IsNTPMatrixMonoid, IsPosInt, IsPosInt, IsSemigroup],
|
|
527
|
+
function(filter, threshold, period, S)
|
|
528
|
+
local iso1, inv1, iso2, inv2;
|
|
529
|
+
|
|
530
|
+
iso1 := IsomorphismTransformationMonoid(S);
|
|
531
|
+
inv1 := InverseGeneralMapping(iso1);
|
|
532
|
+
iso2 := IsomorphismMonoid(filter, threshold, period, Range(iso1));
|
|
533
|
+
inv2 := InverseGeneralMapping(iso2);
|
|
534
|
+
|
|
535
|
+
return SemigroupIsomorphismByFunctionNC(S,
|
|
536
|
+
Range(iso2),
|
|
537
|
+
x -> (x ^ iso1) ^ iso2,
|
|
538
|
+
x -> (x ^ inv2) ^ inv1);
|
|
539
|
+
end);
|
|
540
|
+
|
|
541
|
+
InstallMethod(IsomorphismMonoid,
|
|
542
|
+
"for IsNTPMatrixMonoid and a semigroup",
|
|
543
|
+
[IsNTPMatrixMonoid, IsSemigroup],
|
|
544
|
+
{filter, S} -> IsomorphismMonoid(filter, 1, 1, S));
|
|
545
|
+
|
|
546
|
+
InstallMethod(IsomorphismMonoid,
|
|
547
|
+
"for IsNTPMatrixMonoid and a ntp matrix semigroup",
|
|
548
|
+
[IsNTPMatrixMonoid, IsNTPMatrixSemigroup],
|
|
549
|
+
function(filter, S)
|
|
550
|
+
return IsomorphismMonoid(filter,
|
|
551
|
+
ThresholdNTPMatrix(Representative(S)),
|
|
552
|
+
PeriodNTPMatrix(Representative(S)),
|
|
553
|
+
S);
|
|
554
|
+
end);
|
|
555
|
+
|
|
556
|
+
InstallMethod(IsomorphismMonoid,
|
|
557
|
+
"for IsNTPMatrixMonoid, pos int, pos int, and a semigroup",
|
|
558
|
+
[IsNTPMatrixMonoid, IsPosInt, IsPosInt, IsMonoid],
|
|
559
|
+
{filter, threshold, period, S}
|
|
560
|
+
-> IsomorphismSemigroup(IsNTPMatrixSemigroup, threshold, period, S));
|
|
561
|
+
|
|
562
|
+
InstallMethod(IsomorphismSemigroup,
|
|
563
|
+
"for IsNTPMatrixSemigroup, pos int, pos int, trans semigroup with gens",
|
|
564
|
+
[IsNTPMatrixSemigroup, IsPosInt, IsPosInt,
|
|
565
|
+
IsTransformationSemigroup and HasGeneratorsOfSemigroup],
|
|
566
|
+
function(_, threshold, period, S)
|
|
567
|
+
local n, map, T;
|
|
568
|
+
|
|
569
|
+
n := Maximum(DegreeOfTransformationSemigroup(S), 1);
|
|
570
|
+
map := x -> AsMatrix(IsNTPMatrix, x, n, threshold, period);
|
|
571
|
+
T := Semigroup(List(GeneratorsOfSemigroup(S), map));
|
|
572
|
+
UseIsomorphismRelation(S, T);
|
|
573
|
+
|
|
574
|
+
return SemigroupIsomorphismByFunctionNC(S,
|
|
575
|
+
T,
|
|
576
|
+
x -> AsMatrix(IsNTPMatrix,
|
|
577
|
+
x,
|
|
578
|
+
n,
|
|
579
|
+
threshold,
|
|
580
|
+
period),
|
|
581
|
+
AsTransformation);
|
|
582
|
+
end);
|
|
583
|
+
|
|
584
|
+
#############################################################################
|
|
585
|
+
## IsFinite and required methods for max-plus and min-plus matrix semigroups.
|
|
586
|
+
#############################################################################
|
|
587
|
+
|
|
588
|
+
## Method from corollary 10, page 148, of:
|
|
589
|
+
## I. Simon, Limited subsets of the free monoid,
|
|
590
|
+
## Proc. of the 19th Annual Symposium on the Foundations of Computer Science,
|
|
591
|
+
## IEEE, 1978, pp. 143-150.
|
|
592
|
+
## https://tinyurl.com/h8er92u
|
|
593
|
+
|
|
594
|
+
InstallMethod(IsFinite,
|
|
595
|
+
"for a min-plus matrix semigroup",
|
|
596
|
+
[IsMinPlusMatrixSemigroup], SUM_FLAGS,
|
|
597
|
+
function(S)
|
|
598
|
+
local gens, id, mat, row, val;
|
|
599
|
+
|
|
600
|
+
if IsEnumerated(Enumerate(S, 8192)) then
|
|
601
|
+
return true;
|
|
602
|
+
fi;
|
|
603
|
+
|
|
604
|
+
gens := GeneratorsOfSemigroup(S);
|
|
605
|
+
for mat in gens do
|
|
606
|
+
for row in mat do
|
|
607
|
+
for val in row do
|
|
608
|
+
if val < 0 then
|
|
609
|
+
TryNextMethod();
|
|
610
|
+
fi;
|
|
611
|
+
od;
|
|
612
|
+
od;
|
|
613
|
+
od;
|
|
614
|
+
id := Idempotents(Semigroup(List(gens,
|
|
615
|
+
x -> AsMatrix(IsTropicalMinPlusMatrix,
|
|
616
|
+
x,
|
|
617
|
+
1))));
|
|
618
|
+
for mat in id do
|
|
619
|
+
mat := AsMatrix(IsMinPlusMatrix, mat);
|
|
620
|
+
if mat ^ 2 <> mat ^ 3 then
|
|
621
|
+
return false;
|
|
622
|
+
fi;
|
|
623
|
+
od;
|
|
624
|
+
return true;
|
|
625
|
+
end);
|
|
626
|
+
|
|
627
|
+
## The next two methods (IsFinite, IsTorsion for Max-plus) rely primarily on:
|
|
628
|
+
## a)
|
|
629
|
+
## Theorem 2.1 (positive solution to burnside problem) and
|
|
630
|
+
## theorem 2.2 (decidability of torsion problem), page 2 et.al, from:
|
|
631
|
+
## S. Gaubert, On the burnside problem for semigroups of matrices in the
|
|
632
|
+
## (max, +) algebra, Semigroup Forum, Volume 52, pp 271-292, 1996.
|
|
633
|
+
## https://tinyurl.com/znhk52m
|
|
634
|
+
## b)
|
|
635
|
+
## An unpublished result by J.D Mitchell & S. Burrell relating isomorphism of
|
|
636
|
+
## normalized max-plus matrix semigroups to min-plus matrix semigroups.
|
|
637
|
+
## (N.B.) b) is optional but preferable, for alternatives see a).
|
|
638
|
+
|
|
639
|
+
InstallMethod(IsFinite,
|
|
640
|
+
"for max-plus matrix semigroups",
|
|
641
|
+
[IsMaxPlusMatrixSemigroup], SUM_FLAGS,
|
|
642
|
+
function(S)
|
|
643
|
+
if IsEnumerated(Enumerate(S, 8192)) then
|
|
644
|
+
return true;
|
|
645
|
+
fi;
|
|
646
|
+
return IsTorsion(S);
|
|
647
|
+
end);
|
|
648
|
+
|
|
649
|
+
InstallMethod(IsTorsion,
|
|
650
|
+
"for a max-plus matrix semigroup",
|
|
651
|
+
[IsMaxPlusMatrixSemigroup],
|
|
652
|
+
function(S)
|
|
653
|
+
local gens, dim, func, m, rad, T;
|
|
654
|
+
|
|
655
|
+
gens := GeneratorsOfSemigroup(S);
|
|
656
|
+
dim := DimensionOfMatrixOverSemiring(Representative(gens));
|
|
657
|
+
|
|
658
|
+
func := function(i)
|
|
659
|
+
return List([1 .. dim],
|
|
660
|
+
j -> Maximum(List([1 .. Length(gens)], k -> gens[k][i][j])));
|
|
661
|
+
end;
|
|
662
|
+
|
|
663
|
+
m := Matrix(IsMaxPlusMatrix, List([1 .. dim], func));
|
|
664
|
+
|
|
665
|
+
# Case: SpectralRadius = - infinity
|
|
666
|
+
rad := SpectralRadius(m);
|
|
667
|
+
if rad = -infinity then
|
|
668
|
+
return true;
|
|
669
|
+
elif rad <> 0 then
|
|
670
|
+
return false;
|
|
671
|
+
fi;
|
|
672
|
+
|
|
673
|
+
# Case: SpectralRadius = 0
|
|
674
|
+
T := NormalizeSemigroup(S);
|
|
675
|
+
gens := List(GeneratorsOfSemigroup(T),
|
|
676
|
+
x -> Matrix(IsMinPlusMatrix, -AsList(x)));
|
|
677
|
+
return IsFinite(Semigroup(gens));
|
|
678
|
+
end);
|
|
679
|
+
|
|
680
|
+
## A method based on the original solution by S. Gaubert (On the burnside
|
|
681
|
+
## problem for semigroups of matrices in the (max, +) algebra), but
|
|
682
|
+
## modified by S. Burrell (see thesis https://tinyurl.com/gr94xha).
|
|
683
|
+
|
|
684
|
+
InstallMethod(NormalizeSemigroup,
|
|
685
|
+
"for a finitely generated semigroup of max-plus matrices",
|
|
686
|
+
[IsMaxPlusMatrixSemigroup],
|
|
687
|
+
function(S)
|
|
688
|
+
local gens, dim, func, m, critcol, d, ngens, i;
|
|
689
|
+
|
|
690
|
+
gens := GeneratorsOfSemigroup(S);
|
|
691
|
+
dim := DimensionOfMatrixOverSemiring(Representative(gens));
|
|
692
|
+
|
|
693
|
+
func := function(i)
|
|
694
|
+
return List([1 .. dim],
|
|
695
|
+
j -> Maximum(List([1 .. Length(gens)], k -> gens[k][i][j])));
|
|
696
|
+
end;
|
|
697
|
+
|
|
698
|
+
# Sum with respect to max-plus algebra of generators of S.
|
|
699
|
+
m := Matrix(IsMaxPlusMatrix, List([1 .. dim], func));
|
|
700
|
+
|
|
701
|
+
critcol := RadialEigenvector(m);
|
|
702
|
+
d := List([1 .. dim], i -> List([1 .. dim], j -> -infinity));
|
|
703
|
+
for i in [1 .. dim] do
|
|
704
|
+
d[i][i] := critcol[i];
|
|
705
|
+
od;
|
|
706
|
+
d := Matrix(IsMaxPlusMatrix, d);
|
|
707
|
+
|
|
708
|
+
ngens := List(gens, g -> InverseOp(d) * g * d);
|
|
709
|
+
return Semigroup(ngens);
|
|
710
|
+
end);
|