passagemath-gap-pkg-semigroups 10.6.30__cp311-cp311-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.cpython-311-darwin.so +0 -0
|
@@ -0,0 +1,655 @@
|
|
|
1
|
+
###########################################################################
|
|
2
|
+
##
|
|
3
|
+
## main/froidure-pin.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 methods for accessing the kernel level version of the
|
|
12
|
+
# Froidure-Pin algorithm for enumerating arbitrary semigroups.
|
|
13
|
+
|
|
14
|
+
# For some details see:
|
|
15
|
+
#
|
|
16
|
+
# V. Froidure, and J.-E. Pin, Algorithms for computing finite semigroups.
|
|
17
|
+
# Foundations of computational mathematics (Rio de Janeiro, 1997), 112-126,
|
|
18
|
+
# Springer, Berlin, 1997.
|
|
19
|
+
|
|
20
|
+
InstallMethod(CanUseFroidurePin, "for a semigroup",
|
|
21
|
+
[IsSemigroup], S -> CanUseGapFroidurePin(S) or
|
|
22
|
+
CanUseLibsemigroupsFroidurePin(S));
|
|
23
|
+
|
|
24
|
+
InstallMethod(HasFroidurePin, "for a semigroup",
|
|
25
|
+
[IsSemigroup], S -> HasGapFroidurePin(S) or
|
|
26
|
+
HasLibsemigroupsFroidurePin(S));
|
|
27
|
+
|
|
28
|
+
InstallTrueMethod(CanUseFroidurePin, CanUseGapFroidurePin);
|
|
29
|
+
|
|
30
|
+
for x in [IsMatrixOverFiniteFieldSemigroup,
|
|
31
|
+
IsGraphInverseSubsemigroup,
|
|
32
|
+
IsMcAlisterTripleSubsemigroup,
|
|
33
|
+
IsSemigroup and IsFreeBandElementCollection,
|
|
34
|
+
IsPermGroup,
|
|
35
|
+
IsFreeInverseSemigroupCategory] do
|
|
36
|
+
InstallTrueMethod(CanUseGapFroidurePin, x);
|
|
37
|
+
od;
|
|
38
|
+
Unbind(x);
|
|
39
|
+
|
|
40
|
+
InstallMethod(CanUseGapFroidurePin, "for a semigroup",
|
|
41
|
+
[IsSemigroup], ReturnFalse);
|
|
42
|
+
|
|
43
|
+
InstallTrueMethod(CanUseGapFroidurePin,
|
|
44
|
+
IsSemigroup and HasMultiplicationTable and HasGeneratorsOfSemigroup);
|
|
45
|
+
|
|
46
|
+
InstallImmediateMethod(CanUseGapFroidurePin,
|
|
47
|
+
IsReesZeroMatrixSubsemigroup and HasRowsOfReesZeroMatrixSemigroup
|
|
48
|
+
and HasColumnsOfReesZeroMatrixSemigroup, 0,
|
|
49
|
+
function(R)
|
|
50
|
+
return IsPermGroup(UnderlyingSemigroup(R))
|
|
51
|
+
or CanUseFroidurePin(UnderlyingSemigroup(R));
|
|
52
|
+
end);
|
|
53
|
+
|
|
54
|
+
InstallImmediateMethod(CanUseGapFroidurePin,
|
|
55
|
+
IsReesZeroMatrixSubsemigroup and HasGeneratorsOfSemigroup, 0,
|
|
56
|
+
R -> CanUseFroidurePin(ParentAttr(R)));
|
|
57
|
+
|
|
58
|
+
InstallImmediateMethod(CanUseGapFroidurePin,
|
|
59
|
+
IsReesMatrixSubsemigroup and HasRowsOfReesMatrixSemigroup
|
|
60
|
+
and HasColumnsOfReesMatrixSemigroup, 0,
|
|
61
|
+
function(R)
|
|
62
|
+
return IsPermGroup(UnderlyingSemigroup(R))
|
|
63
|
+
or CanUseFroidurePin(UnderlyingSemigroup(R));
|
|
64
|
+
end);
|
|
65
|
+
|
|
66
|
+
InstallImmediateMethod(CanUseGapFroidurePin,
|
|
67
|
+
IsReesMatrixSubsemigroup and HasGeneratorsOfSemigroup, 0,
|
|
68
|
+
R -> CanUseFroidurePin(ParentAttr(R)));
|
|
69
|
+
|
|
70
|
+
# The next method is supposed to catch proper subsemigroups of quotient
|
|
71
|
+
# semigroups
|
|
72
|
+
InstallImmediateMethod(CanUseGapFroidurePin,
|
|
73
|
+
IsAssociativeElementCollColl and HasGeneratorsOfSemigroup, 0,
|
|
74
|
+
function(S)
|
|
75
|
+
if IsEmpty(GeneratorsOfSemigroup(S)) then
|
|
76
|
+
return false;
|
|
77
|
+
fi;
|
|
78
|
+
return (not IsQuotientSemigroup(S))
|
|
79
|
+
and IsCongruenceClass(GeneratorsOfSemigroup(S)[1]);
|
|
80
|
+
end);
|
|
81
|
+
|
|
82
|
+
InstallTrueMethod(CanUseGapFroidurePin,
|
|
83
|
+
IsSemigroupIdeal and IsReesMatrixSubsemigroup);
|
|
84
|
+
|
|
85
|
+
InstallTrueMethod(CanUseGapFroidurePin,
|
|
86
|
+
IsSemigroupIdeal and IsReesZeroMatrixSubsemigroup);
|
|
87
|
+
|
|
88
|
+
# Objects in IsDualSemigroupRep also CanUseGapFroidurePin but this is set
|
|
89
|
+
# at creation in attr/dual.gi
|
|
90
|
+
|
|
91
|
+
InstallMethod(GapFroidurePin, "for a semigroup with CanUseGapFroidurePin",
|
|
92
|
+
[CanUseGapFroidurePin],
|
|
93
|
+
function(S)
|
|
94
|
+
local data, hashlen, nrgens, nr, val, i;
|
|
95
|
+
|
|
96
|
+
data := rec(elts := [],
|
|
97
|
+
final := [],
|
|
98
|
+
first := [],
|
|
99
|
+
found := false,
|
|
100
|
+
genslookup := [],
|
|
101
|
+
left := [],
|
|
102
|
+
len := 1,
|
|
103
|
+
lenindex := [],
|
|
104
|
+
nrrules := 0,
|
|
105
|
+
parent := S,
|
|
106
|
+
prefix := [],
|
|
107
|
+
reduced := [[]],
|
|
108
|
+
right := [],
|
|
109
|
+
rules := [],
|
|
110
|
+
stopper := false,
|
|
111
|
+
suffix := [],
|
|
112
|
+
words := []);
|
|
113
|
+
|
|
114
|
+
hashlen := SEMIGROUPS.OptionsRec(S).hashlen;
|
|
115
|
+
|
|
116
|
+
data.gens := ShallowCopy(GeneratorsOfSemigroup(S));
|
|
117
|
+
nrgens := Length(data.gens);
|
|
118
|
+
data.ht := HTCreate(data.gens[1], rec(treehashsize := hashlen));
|
|
119
|
+
nr := 0;
|
|
120
|
+
data.one := false;
|
|
121
|
+
data.pos := 1;
|
|
122
|
+
data.lenindex[1] := 1;
|
|
123
|
+
data.genstoapply := [1 .. nrgens];
|
|
124
|
+
|
|
125
|
+
# add the generators
|
|
126
|
+
for i in data.genstoapply do
|
|
127
|
+
val := HTValue(data.ht, data.gens[i]);
|
|
128
|
+
if val = fail then # new generator
|
|
129
|
+
nr := nr + 1;
|
|
130
|
+
HTAdd(data.ht, data.gens[i], nr);
|
|
131
|
+
data.elts[nr] := data.gens[i];
|
|
132
|
+
data.words[nr] := [i];
|
|
133
|
+
data.first[nr] := i;
|
|
134
|
+
data.final[nr] := i;
|
|
135
|
+
data.prefix[nr] := 0;
|
|
136
|
+
data.suffix[nr] := 0;
|
|
137
|
+
data.left[nr] := EmptyPlist(nrgens);
|
|
138
|
+
data.right[nr] := EmptyPlist(nrgens);
|
|
139
|
+
data.genslookup[i] := nr;
|
|
140
|
+
data.reduced[nr] := List([1 .. nrgens], ReturnFalse);
|
|
141
|
+
|
|
142
|
+
if data.one = false and ForAll(data.gens,
|
|
143
|
+
y -> data.gens[i] * y = y
|
|
144
|
+
and y * data.gens[i] = y) then
|
|
145
|
+
data.one := nr;
|
|
146
|
+
fi;
|
|
147
|
+
else # duplicate generator
|
|
148
|
+
data.genslookup[i] := val;
|
|
149
|
+
data.nrrules := data.nrrules + 1;
|
|
150
|
+
data.rules[data.nrrules] := [[i], [val]];
|
|
151
|
+
fi;
|
|
152
|
+
od;
|
|
153
|
+
|
|
154
|
+
data.nr := nr;
|
|
155
|
+
return data;
|
|
156
|
+
end);
|
|
157
|
+
|
|
158
|
+
#############################################################################
|
|
159
|
+
# 1. Internal methods
|
|
160
|
+
#############################################################################
|
|
161
|
+
|
|
162
|
+
# This is a fallback method in case we don't know any better way to check this
|
|
163
|
+
|
|
164
|
+
# InstallMethod(IsFinite,
|
|
165
|
+
# "for a semigroup with CanUseGapFroidurePin and known generators",
|
|
166
|
+
# [CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
|
|
167
|
+
# S -> Size(S) < infinity);
|
|
168
|
+
|
|
169
|
+
InstallMethod(AsSet,
|
|
170
|
+
"for a semigroup with CanUseGapFroidurePin and known generators",
|
|
171
|
+
[CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
|
|
172
|
+
function(S)
|
|
173
|
+
if not IsFinite(S) then
|
|
174
|
+
ErrorNoReturn("the argument (a semigroup) is not finite");
|
|
175
|
+
fi;
|
|
176
|
+
return SortedList(RUN_FROIDURE_PIN(GapFroidurePin(S), -1,
|
|
177
|
+
InfoLevel(InfoSemigroups) > 0).elts);
|
|
178
|
+
end);
|
|
179
|
+
|
|
180
|
+
InstallMethod(AsList,
|
|
181
|
+
"for a semigroup with CanUseGapFroidurePin and known generators",
|
|
182
|
+
[CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
|
|
183
|
+
AsListCanonical);
|
|
184
|
+
|
|
185
|
+
InstallMethod(AsListCanonical,
|
|
186
|
+
"for a semigroup with CanUseGapFroidurePin and known generators",
|
|
187
|
+
[CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
|
|
188
|
+
function(S)
|
|
189
|
+
if not IsFinite(S) then
|
|
190
|
+
ErrorNoReturn("the argument (a semigroup) is not finite");
|
|
191
|
+
fi;
|
|
192
|
+
return RUN_FROIDURE_PIN(GapFroidurePin(S), -1,
|
|
193
|
+
InfoLevel(InfoSemigroups) > 0).elts;
|
|
194
|
+
end);
|
|
195
|
+
|
|
196
|
+
# For ideals and other generatorless semigroups
|
|
197
|
+
|
|
198
|
+
InstallMethod(AsListCanonical, "for a semigroup with CanUseGapFroidurePin",
|
|
199
|
+
[CanUseGapFroidurePin],
|
|
200
|
+
function(S)
|
|
201
|
+
GeneratorsOfSemigroup(S);
|
|
202
|
+
return AsListCanonical(S);
|
|
203
|
+
end);
|
|
204
|
+
|
|
205
|
+
InstallMethod(Enumerator,
|
|
206
|
+
"for a semigroup with CanUseGapFroidurePin and known generators",
|
|
207
|
+
[CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
|
|
208
|
+
function(S)
|
|
209
|
+
if (IsReesMatrixSubsemigroup(S) or IsReesZeroMatrixSubsemigroup(S))
|
|
210
|
+
and HasIsWholeFamily(S) and IsWholeFamily(S) then
|
|
211
|
+
TryNextMethod();
|
|
212
|
+
fi;
|
|
213
|
+
return EnumeratorCanonical(S);
|
|
214
|
+
end);
|
|
215
|
+
|
|
216
|
+
InstallMethod(EnumeratorSorted,
|
|
217
|
+
"for a semigroup with CanUseGapFroidurePin and known generators",
|
|
218
|
+
[CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
|
|
219
|
+
function(S)
|
|
220
|
+
if not IsFinite(S) then
|
|
221
|
+
ErrorNoReturn("the argument (a semigroup) is not finite");
|
|
222
|
+
fi;
|
|
223
|
+
TryNextMethod();
|
|
224
|
+
end);
|
|
225
|
+
|
|
226
|
+
InstallMethod(EnumeratorCanonical,
|
|
227
|
+
"for a semigroup with CanUseGapFroidurePin",
|
|
228
|
+
[CanUseGapFroidurePin],
|
|
229
|
+
function(S)
|
|
230
|
+
local enum;
|
|
231
|
+
|
|
232
|
+
if HasAsListCanonical(S) then
|
|
233
|
+
return AsListCanonical(S);
|
|
234
|
+
fi;
|
|
235
|
+
|
|
236
|
+
enum := rec();
|
|
237
|
+
|
|
238
|
+
# TODO Shouldn't S be stored in enum
|
|
239
|
+
enum.NumberElement := {enum, x} -> PositionCanonical(S, x);
|
|
240
|
+
|
|
241
|
+
enum.ElementNumber := function(_, nr)
|
|
242
|
+
local fp;
|
|
243
|
+
fp := GapFroidurePin(S);
|
|
244
|
+
if not (IsBound(fp.elts) and nr < Length(fp.elts) and IsBound(fp.elts[nr]))
|
|
245
|
+
then
|
|
246
|
+
fp := RUN_FROIDURE_PIN(fp, nr, InfoLevel(InfoSemigroups) > 0);
|
|
247
|
+
fi;
|
|
248
|
+
|
|
249
|
+
if nr <= Length(fp.elts) and IsBound(fp.elts[nr]) then
|
|
250
|
+
return fp.elts[nr];
|
|
251
|
+
fi;
|
|
252
|
+
return fail;
|
|
253
|
+
end;
|
|
254
|
+
|
|
255
|
+
enum.Length := enum -> Size(S);
|
|
256
|
+
|
|
257
|
+
enum.AsList := enum -> AsListCanonical(S);
|
|
258
|
+
|
|
259
|
+
enum.Membership := {x, enum} -> PositionCanonical(S, x) <> fail;
|
|
260
|
+
|
|
261
|
+
enum.IsBound\[\] := {enum, nr} -> nr <= Length(enum);
|
|
262
|
+
|
|
263
|
+
enum := EnumeratorByFunctions(S, enum);
|
|
264
|
+
SetIsSemigroupEnumerator(enum, true);
|
|
265
|
+
return enum;
|
|
266
|
+
end);
|
|
267
|
+
|
|
268
|
+
InstallMethod(IteratorCanonical,
|
|
269
|
+
"for a semigroup with CanUseGapFroidurePin",
|
|
270
|
+
[CanUseGapFroidurePin],
|
|
271
|
+
S -> IteratorFiniteList(EnumeratorCanonical(S)));
|
|
272
|
+
|
|
273
|
+
InstallMethod(Iterator,
|
|
274
|
+
"for a semigroup with CanUseGapFroidurePin",
|
|
275
|
+
[CanUseGapFroidurePin],
|
|
276
|
+
S -> IteratorFiniteList(Enumerator(S)));
|
|
277
|
+
|
|
278
|
+
InstallMethod(IteratorSorted,
|
|
279
|
+
"for a semigroup with CanUseGapFroidurePin",
|
|
280
|
+
[CanUseGapFroidurePin],
|
|
281
|
+
S -> IteratorFiniteList(EnumeratorSorted(S)));
|
|
282
|
+
|
|
283
|
+
# different method for ideals
|
|
284
|
+
|
|
285
|
+
InstallMethod(Size,
|
|
286
|
+
"for a semigroup with CanUseGapFroidurePin and known generators",
|
|
287
|
+
[CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
|
|
288
|
+
function(S)
|
|
289
|
+
return Length(RUN_FROIDURE_PIN(GapFroidurePin(S), -1,
|
|
290
|
+
InfoLevel(InfoSemigroups) > 0).elts);
|
|
291
|
+
end);
|
|
292
|
+
|
|
293
|
+
# different method for ideals
|
|
294
|
+
|
|
295
|
+
InstallMethod(\in,
|
|
296
|
+
"for mult. elt. and a semigroup with CanUseGapFroidurePin + generators",
|
|
297
|
+
[IsMultiplicativeElement,
|
|
298
|
+
CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
|
|
299
|
+
{x, S} -> PositionCanonical(S, x) <> fail);
|
|
300
|
+
|
|
301
|
+
# different method for ideals
|
|
302
|
+
|
|
303
|
+
InstallMethod(Idempotents,
|
|
304
|
+
"for a semigroup with CanUseGapFroidurePin and known generators",
|
|
305
|
+
[CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
|
|
306
|
+
function(S)
|
|
307
|
+
if not IsFinite(S) then
|
|
308
|
+
ErrorNoReturn("the argument (a semigroup) is not finite");
|
|
309
|
+
fi;
|
|
310
|
+
return EnumeratorCanonical(S){IdempotentsSubset(S, [1 .. Size(S)])};
|
|
311
|
+
end);
|
|
312
|
+
|
|
313
|
+
InstallMethod(PositionCanonical,
|
|
314
|
+
"for a semigroup with CanUseGapFroidurePin, generators, and mult. elt",
|
|
315
|
+
[CanUseGapFroidurePin and HasGeneratorsOfSemigroup,
|
|
316
|
+
IsMultiplicativeElement],
|
|
317
|
+
function(S, x)
|
|
318
|
+
local fp, ht, nr, val, limit, pos;
|
|
319
|
+
|
|
320
|
+
if FamilyObj(x) <> ElementsFamily(FamilyObj(S)) then
|
|
321
|
+
return fail;
|
|
322
|
+
fi;
|
|
323
|
+
|
|
324
|
+
fp := GapFroidurePin(S);
|
|
325
|
+
ht := fp.ht;
|
|
326
|
+
nr := fp.nr;
|
|
327
|
+
repeat
|
|
328
|
+
val := HTValue(ht, x);
|
|
329
|
+
if val <> fail then
|
|
330
|
+
return val;
|
|
331
|
+
fi;
|
|
332
|
+
limit := nr + 1;
|
|
333
|
+
fp := RUN_FROIDURE_PIN(fp, limit, InfoLevel(InfoSemigroups) > 0);
|
|
334
|
+
pos := fp.pos;
|
|
335
|
+
nr := fp.nr;
|
|
336
|
+
until pos > nr;
|
|
337
|
+
|
|
338
|
+
return HTValue(ht, x);
|
|
339
|
+
end);
|
|
340
|
+
|
|
341
|
+
# Position exists so that we can call it on objects with an uninitialised data
|
|
342
|
+
# structure, without first having to initialise the data structure to realise
|
|
343
|
+
# that <x> is not in it.
|
|
344
|
+
|
|
345
|
+
# This returns the current position of x, if it is already known to belong to
|
|
346
|
+
# S.
|
|
347
|
+
|
|
348
|
+
InstallMethod(Position,
|
|
349
|
+
"for a semigroup with CanUseGapFroidurePin, mult. element, zero cyc",
|
|
350
|
+
[CanUseGapFroidurePin, IsMultiplicativeElement, IsZeroCyc],
|
|
351
|
+
PositionOp);
|
|
352
|
+
|
|
353
|
+
InstallMethod(PositionOp,
|
|
354
|
+
"for a semigroup with CanUseGapFroidurePin, multi. element, zero cyc",
|
|
355
|
+
[CanUseGapFroidurePin, IsMultiplicativeElement, IsZeroCyc],
|
|
356
|
+
function(S, x, _)
|
|
357
|
+
if FamilyObj(x) <> ElementsFamily(FamilyObj(S)) then
|
|
358
|
+
return fail;
|
|
359
|
+
fi;
|
|
360
|
+
return HTValue(GapFroidurePin(S).ht, x);
|
|
361
|
+
end);
|
|
362
|
+
|
|
363
|
+
InstallMethod(PositionSortedOp,
|
|
364
|
+
"for a semigroup with CanUseGapFroidurePin, generators and mult. elt.",
|
|
365
|
+
[CanUseGapFroidurePin and HasGeneratorsOfSemigroup,
|
|
366
|
+
IsMultiplicativeElement],
|
|
367
|
+
function(S, x)
|
|
368
|
+
if FamilyObj(x) <> ElementsFamily(FamilyObj(S)) then
|
|
369
|
+
return fail;
|
|
370
|
+
elif not IsFinite(S) then
|
|
371
|
+
ErrorNoReturn("the 1st argument (a semigroup) is not finite");
|
|
372
|
+
fi;
|
|
373
|
+
return Position(AsSet(S), x);
|
|
374
|
+
end);
|
|
375
|
+
|
|
376
|
+
InstallMethod(IsEnumerated, "for a semigroup with CanUseGapFroidurePin",
|
|
377
|
+
[CanUseGapFroidurePin],
|
|
378
|
+
function(S)
|
|
379
|
+
local fp;
|
|
380
|
+
if HasGapFroidurePin(S) then
|
|
381
|
+
fp := GapFroidurePin(S);
|
|
382
|
+
return fp.pos > fp.nr;
|
|
383
|
+
fi;
|
|
384
|
+
return false;
|
|
385
|
+
end);
|
|
386
|
+
|
|
387
|
+
# the main algorithm
|
|
388
|
+
|
|
389
|
+
InstallMethod(Enumerate,
|
|
390
|
+
"for a semigroup with CanUseGapFroidurePin and known generators and pos int",
|
|
391
|
+
[CanUseGapFroidurePin and HasGeneratorsOfSemigroup, IsInt],
|
|
392
|
+
function(S, limit)
|
|
393
|
+
RUN_FROIDURE_PIN(GapFroidurePin(S), limit, InfoLevel(InfoSemigroups) > 0);
|
|
394
|
+
return S;
|
|
395
|
+
end);
|
|
396
|
+
|
|
397
|
+
InstallMethod(Enumerate,
|
|
398
|
+
"for a semigroup with CanUseGapFroidurePin and known generators",
|
|
399
|
+
[CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
|
|
400
|
+
S -> Enumerate(S, -1));
|
|
401
|
+
|
|
402
|
+
# same method for ideals
|
|
403
|
+
|
|
404
|
+
InstallMethod(RightCayleyGraphSemigroup,
|
|
405
|
+
"for a semigroup with CanUseGapFroidurePin",
|
|
406
|
+
[CanUseGapFroidurePin], 3,
|
|
407
|
+
function(S)
|
|
408
|
+
if not IsFinite(S) then
|
|
409
|
+
ErrorNoReturn("the argument (a semigroup) is not finite");
|
|
410
|
+
fi;
|
|
411
|
+
return RUN_FROIDURE_PIN(GapFroidurePin(S), -1,
|
|
412
|
+
InfoLevel(InfoSemigroups) > 0).right;
|
|
413
|
+
end);
|
|
414
|
+
|
|
415
|
+
InstallMethod(RightCayleyDigraph,
|
|
416
|
+
"for a semigroup with CanUseGapFroidurePin rep",
|
|
417
|
+
[CanUseGapFroidurePin],
|
|
418
|
+
function(S)
|
|
419
|
+
local D;
|
|
420
|
+
if not IsFinite(S) then
|
|
421
|
+
ErrorNoReturn("the argument (a semigroup) is not finite");
|
|
422
|
+
fi;
|
|
423
|
+
|
|
424
|
+
D := DigraphNC(MakeImmutable(RightCayleyGraphSemigroup(S)));
|
|
425
|
+
SetFilterObj(D, IsCayleyDigraph);
|
|
426
|
+
SetSemigroupOfCayleyDigraph(D, S);
|
|
427
|
+
SetGeneratorsOfCayleyDigraph(D, GeneratorsOfSemigroup(S));
|
|
428
|
+
return D;
|
|
429
|
+
end);
|
|
430
|
+
|
|
431
|
+
# same method for ideals
|
|
432
|
+
|
|
433
|
+
InstallMethod(LeftCayleyGraphSemigroup,
|
|
434
|
+
"for a semigroup with CanUseGapFroidurePin",
|
|
435
|
+
[CanUseGapFroidurePin], 3,
|
|
436
|
+
function(S)
|
|
437
|
+
if not IsFinite(S) then
|
|
438
|
+
ErrorNoReturn("the argument (a semigroup) is not finite");
|
|
439
|
+
fi;
|
|
440
|
+
return RUN_FROIDURE_PIN(GapFroidurePin(S), -1,
|
|
441
|
+
InfoLevel(InfoSemigroups) > 0).left;
|
|
442
|
+
end);
|
|
443
|
+
|
|
444
|
+
InstallMethod(LeftCayleyDigraph,
|
|
445
|
+
"for a semigroup with CanUseGapFroidurePin rep",
|
|
446
|
+
[CanUseGapFroidurePin],
|
|
447
|
+
function(S)
|
|
448
|
+
local D;
|
|
449
|
+
if not IsFinite(S) then
|
|
450
|
+
ErrorNoReturn("the argument (a semigroup) is not finite");
|
|
451
|
+
fi;
|
|
452
|
+
D := DigraphNC(MakeImmutable(LeftCayleyGraphSemigroup(S)));
|
|
453
|
+
SetFilterObj(D, IsCayleyDigraph);
|
|
454
|
+
SetSemigroupOfCayleyDigraph(D, S);
|
|
455
|
+
SetGeneratorsOfCayleyDigraph(D, GeneratorsOfSemigroup(S));
|
|
456
|
+
return D;
|
|
457
|
+
end);
|
|
458
|
+
|
|
459
|
+
InstallMethod(NrIdempotents, "for a semigroup with CanUseGapFroidurePin rep",
|
|
460
|
+
[CanUseGapFroidurePin],
|
|
461
|
+
function(S)
|
|
462
|
+
if not IsFinite(S) then
|
|
463
|
+
Error("the argument (a semigroup) is not finite");
|
|
464
|
+
fi;
|
|
465
|
+
return Length(Idempotents(S));
|
|
466
|
+
end);
|
|
467
|
+
|
|
468
|
+
InstallMethod(Factorization,
|
|
469
|
+
"for a semigroup with CanUseGapFroidurePin and a positive integer",
|
|
470
|
+
[CanUseGapFroidurePin, IsPosInt], MinimalFactorization);
|
|
471
|
+
|
|
472
|
+
InstallMethod(MinimalFactorization,
|
|
473
|
+
"for a semigroup with CanUseGapFroidurePin and a pos. int.",
|
|
474
|
+
[CanUseGapFroidurePin, IsPosInt],
|
|
475
|
+
function(S, i)
|
|
476
|
+
local words;
|
|
477
|
+
|
|
478
|
+
if i > Size(S) then
|
|
479
|
+
ErrorNoReturn("the 2nd argument (a positive integer) is greater ",
|
|
480
|
+
"than the size of the 1st argument (a semigroup)");
|
|
481
|
+
fi;
|
|
482
|
+
|
|
483
|
+
words := RUN_FROIDURE_PIN(GapFroidurePin(S),
|
|
484
|
+
i + 1,
|
|
485
|
+
InfoLevel(InfoSemigroups) > 0).words;
|
|
486
|
+
return ShallowCopy(words[i]);
|
|
487
|
+
end);
|
|
488
|
+
|
|
489
|
+
InstallMethod(MinimalFactorization,
|
|
490
|
+
"for a semigroup with CanUseGapFroidurePin and a multiplicative element",
|
|
491
|
+
[CanUseGapFroidurePin, IsMultiplicativeElement],
|
|
492
|
+
function(S, x)
|
|
493
|
+
if not x in S then
|
|
494
|
+
ErrorNoReturn("the 2nd argument (a mult. elt.) is not an element ",
|
|
495
|
+
"of the 1st argument (a semigroup)");
|
|
496
|
+
fi;
|
|
497
|
+
return Factorization(S, PositionCanonical(S, x));
|
|
498
|
+
end);
|
|
499
|
+
|
|
500
|
+
InstallMethod(Factorization,
|
|
501
|
+
"for a semigroup with CanUseGapFroidurePin and a multiplicative element",
|
|
502
|
+
[CanUseGapFroidurePin, IsMultiplicativeElement], MinimalFactorization);
|
|
503
|
+
|
|
504
|
+
InstallMethod(RulesOfSemigroup,
|
|
505
|
+
"for a semigroup with CanUseGapFroidurePin",
|
|
506
|
+
[CanUseGapFroidurePin],
|
|
507
|
+
function(S)
|
|
508
|
+
if not IsFinite(S) then
|
|
509
|
+
Error("the argument (a semigroup) is not finite");
|
|
510
|
+
fi;
|
|
511
|
+
return RUN_FROIDURE_PIN(GapFroidurePin(S), -1,
|
|
512
|
+
InfoLevel(InfoSemigroups) > 0).rules;
|
|
513
|
+
end);
|
|
514
|
+
|
|
515
|
+
InstallMethod(IdempotentsSubset,
|
|
516
|
+
"for a semigroup with CanUseGapFroidurePin + known generators, hom. list",
|
|
517
|
+
[CanUseGapFroidurePin and HasGeneratorsOfSemigroup,
|
|
518
|
+
IsHomogeneousList],
|
|
519
|
+
function(S, list)
|
|
520
|
+
local fp, left, final, prefix, elts, out, i, j, pos;
|
|
521
|
+
|
|
522
|
+
fp := RUN_FROIDURE_PIN(GapFroidurePin(S),
|
|
523
|
+
Maximum(list) + 1,
|
|
524
|
+
InfoLevel(InfoSemigroups) > 0);
|
|
525
|
+
left := fp.left;
|
|
526
|
+
final := fp.final;
|
|
527
|
+
prefix := fp.prefix;
|
|
528
|
+
elts := fp.elts;
|
|
529
|
+
|
|
530
|
+
out := [];
|
|
531
|
+
for pos in list do
|
|
532
|
+
i := pos;
|
|
533
|
+
j := pos;
|
|
534
|
+
repeat
|
|
535
|
+
j := left[j][final[i]];
|
|
536
|
+
i := prefix[i];
|
|
537
|
+
until i = 0;
|
|
538
|
+
if j = pos then
|
|
539
|
+
Add(out, pos);
|
|
540
|
+
fi;
|
|
541
|
+
od;
|
|
542
|
+
return out;
|
|
543
|
+
end);
|
|
544
|
+
|
|
545
|
+
InstallMethod(FirstLetter,
|
|
546
|
+
"for a semigroup with CanUseGapFroidurePin and a pos. int.",
|
|
547
|
+
[CanUseGapFroidurePin, IsPosInt],
|
|
548
|
+
function(S, i)
|
|
549
|
+
local fp;
|
|
550
|
+
|
|
551
|
+
if i > Size(S) then
|
|
552
|
+
ErrorNoReturn("the 2nd argument (a positive integer) is greater ",
|
|
553
|
+
"than the size of the 1st argument (a semigroup)");
|
|
554
|
+
fi;
|
|
555
|
+
|
|
556
|
+
fp := RUN_FROIDURE_PIN(GapFroidurePin(S),
|
|
557
|
+
i + 1,
|
|
558
|
+
InfoLevel(InfoSemigroups) > 0);
|
|
559
|
+
return fp.first[i];
|
|
560
|
+
end);
|
|
561
|
+
|
|
562
|
+
InstallMethod(FirstLetter,
|
|
563
|
+
"for a semigroup with CanUseGapFroidurePin and a multiplicative element",
|
|
564
|
+
[CanUseGapFroidurePin, IsMultiplicativeElement],
|
|
565
|
+
function(S, x)
|
|
566
|
+
if not x in S then
|
|
567
|
+
ErrorNoReturn("the 2nd argument (a mult. elt.) is not an element ",
|
|
568
|
+
"of the 1st argument (a semigroup)");
|
|
569
|
+
fi;
|
|
570
|
+
return FirstLetter(S, PositionCanonical(S, x));
|
|
571
|
+
end);
|
|
572
|
+
|
|
573
|
+
InstallMethod(FinalLetter,
|
|
574
|
+
"for a semigroup with CanUseGapFroidurePin and a pos. int.",
|
|
575
|
+
[CanUseGapFroidurePin, IsPosInt],
|
|
576
|
+
function(S, i)
|
|
577
|
+
local fp;
|
|
578
|
+
|
|
579
|
+
if i > Size(S) then
|
|
580
|
+
ErrorNoReturn("the 2nd argument (a positive integer) is greater ",
|
|
581
|
+
"than the size of the 1st argument (a semigroup)");
|
|
582
|
+
fi;
|
|
583
|
+
|
|
584
|
+
fp := RUN_FROIDURE_PIN(GapFroidurePin(S),
|
|
585
|
+
i + 1,
|
|
586
|
+
InfoLevel(InfoSemigroups) > 0);
|
|
587
|
+
return fp.final[i];
|
|
588
|
+
end);
|
|
589
|
+
|
|
590
|
+
InstallMethod(FinalLetter,
|
|
591
|
+
"for a semigroup with CanUseGapFroidurePin and a multiplicative element",
|
|
592
|
+
[CanUseGapFroidurePin, IsMultiplicativeElement],
|
|
593
|
+
function(S, x)
|
|
594
|
+
if not x in S then
|
|
595
|
+
ErrorNoReturn("the 2nd argument (a mult. elt.) is not an element ",
|
|
596
|
+
"of the 1st argument (a semigroup)");
|
|
597
|
+
fi;
|
|
598
|
+
return FinalLetter(S, PositionCanonical(S, x));
|
|
599
|
+
end);
|
|
600
|
+
|
|
601
|
+
InstallMethod(Prefix,
|
|
602
|
+
"for a semigroup with CanUseGapFroidurePin and a pos. int.",
|
|
603
|
+
[CanUseGapFroidurePin, IsPosInt],
|
|
604
|
+
function(S, i)
|
|
605
|
+
local fp;
|
|
606
|
+
|
|
607
|
+
if i > Size(S) then
|
|
608
|
+
ErrorNoReturn("the 2nd argument (a positive integer) is greater ",
|
|
609
|
+
"than the size of the 1st argument (a semigroup)");
|
|
610
|
+
fi;
|
|
611
|
+
|
|
612
|
+
fp := RUN_FROIDURE_PIN(GapFroidurePin(S),
|
|
613
|
+
i + 1,
|
|
614
|
+
InfoLevel(InfoSemigroups) > 0);
|
|
615
|
+
return fp.prefix[i];
|
|
616
|
+
end);
|
|
617
|
+
|
|
618
|
+
InstallMethod(Prefix,
|
|
619
|
+
"for a semigroup with CanUseGapFroidurePin and a multiplicative element",
|
|
620
|
+
[CanUseGapFroidurePin, IsMultiplicativeElement],
|
|
621
|
+
function(S, x)
|
|
622
|
+
if not x in S then
|
|
623
|
+
ErrorNoReturn("the 2nd argument (a mult. elt.) is not an element ",
|
|
624
|
+
"of the 1st argument (a semigroup)");
|
|
625
|
+
fi;
|
|
626
|
+
return Prefix(S, PositionCanonical(S, x));
|
|
627
|
+
end);
|
|
628
|
+
|
|
629
|
+
InstallMethod(Suffix,
|
|
630
|
+
"for a semigroup with CanUseGapFroidurePin and a pos. int.",
|
|
631
|
+
[CanUseGapFroidurePin, IsPosInt],
|
|
632
|
+
function(S, i)
|
|
633
|
+
local fp;
|
|
634
|
+
|
|
635
|
+
if i > Size(S) then
|
|
636
|
+
ErrorNoReturn("the 2nd argument (a positive integer) is greater ",
|
|
637
|
+
"than the size of the 1st argument (a semigroup)");
|
|
638
|
+
fi;
|
|
639
|
+
|
|
640
|
+
fp := RUN_FROIDURE_PIN(GapFroidurePin(S),
|
|
641
|
+
i + 1,
|
|
642
|
+
InfoLevel(InfoSemigroups) > 0);
|
|
643
|
+
return fp.suffix[i];
|
|
644
|
+
end);
|
|
645
|
+
|
|
646
|
+
InstallMethod(Suffix,
|
|
647
|
+
"for a semigroup with CanUseGapFroidurePin and a multiplicative element",
|
|
648
|
+
[CanUseGapFroidurePin, IsMultiplicativeElement],
|
|
649
|
+
function(S, x)
|
|
650
|
+
if not x in S then
|
|
651
|
+
ErrorNoReturn("the 2nd argument (a mult. elt.) is not an element ",
|
|
652
|
+
"of the 1st argument (a semigroup)");
|
|
653
|
+
fi;
|
|
654
|
+
return Suffix(S, PositionCanonical(S, x));
|
|
655
|
+
end);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
############################################################################
|
|
2
|
+
##
|
|
3
|
+
## main/graded.gd
|
|
4
|
+
## Copyright (C) 2013-2022 James D. Mitchell
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
# hash table of all lambda values found so far, HTValue of LambdaHT points
|
|
12
|
+
# to where the graded orbit is in GradedLambdaOrbs
|
|
13
|
+
# only applies in graded case
|
|
14
|
+
DeclareAttribute("GradedLambdaHT", IsActingSemigroup, "mutable");
|
|
15
|
+
DeclareAttribute("GradedRhoHT", IsActingSemigroup, "mutable");
|
|
16
|
+
|
|
17
|
+
DeclareGlobalFunction("GradedLambdaOrb");
|
|
18
|
+
DeclareGlobalFunction("GradedRhoOrb");
|
|
19
|
+
DeclareFilter("IsGradedLambdaOrb", IsLambdaOrb);
|
|
20
|
+
DeclareFilter("IsGradedRhoOrb", IsRhoOrb);
|
|
21
|
+
|
|
22
|
+
DeclareAttribute("GradedLambdaOrbs", IsActingSemigroup, "mutable");
|
|
23
|
+
DeclareGlobalFunction("IteratorOfGradedLambdaOrbs");
|
|
24
|
+
DeclareAttribute("GradedRhoOrbs", IsActingSemigroup, "mutable");
|
|
25
|
+
DeclareProperty("IsGradedLambdaOrbs", IsOrbit);
|
|
26
|
+
DeclareProperty("IsGradedRhoOrbs", IsOrbit);
|