passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-macosx_13_0_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-gap-pkg-semigroups might be problematic. Click here for more details.
- gap/pkg/semigroups/CHANGELOG.md +1699 -0
- gap/pkg/semigroups/CONTRIBUTING.md +91 -0
- gap/pkg/semigroups/GNUmakefile +110 -0
- gap/pkg/semigroups/GNUmakefile.in +110 -0
- gap/pkg/semigroups/GPL +674 -0
- gap/pkg/semigroups/LICENSE +16 -0
- gap/pkg/semigroups/Makefile +26 -0
- gap/pkg/semigroups/Makefile.gappkg +225 -0
- gap/pkg/semigroups/PackageInfo.g +529 -0
- gap/pkg/semigroups/README.md +102 -0
- gap/pkg/semigroups/VERSIONS +112 -0
- gap/pkg/semigroups/aclocal.m4 +375 -0
- gap/pkg/semigroups/autogen.sh +25 -0
- gap/pkg/semigroups/bin/x86_64-apple-darwin22-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1082 -0
- gap/pkg/semigroups/config.status +1134 -0
- gap/pkg/semigroups/config.sub +1960 -0
- gap/pkg/semigroups/configure +9742 -0
- gap/pkg/semigroups/configure.ac +71 -0
- gap/pkg/semigroups/data/doc/greens.pickle +1 -0
- gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
- gap/pkg/semigroups/data/tst/bipart4 +10 -0
- gap/pkg/semigroups/data/tst/pperm10 +1 -0
- gap/pkg/semigroups/data/tst/tables.gz +0 -0
- gap/pkg/semigroups/data/tst/testdata +1 -0
- gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
- gap/pkg/semigroups/data/tst/trans3 +7 -0
- gap/pkg/semigroups/data/tst/trans3-old +7 -0
- gap/pkg/semigroups/environment.yml +7 -0
- gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
- gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
- gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
- gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
- gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
- gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
- gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
- gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
- gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
- gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
- gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
- gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
- gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
- gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
- gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
- gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
- gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
- gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
- gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
- gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
- gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
- gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
- gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
- gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
- gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
- gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
- gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
- gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
- gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
- gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
- gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
- gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
- gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
- gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
- gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
- gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
- gap/pkg/semigroups/gap/elements/elements.gd +11 -0
- gap/pkg/semigroups/gap/elements/elements.gi +121 -0
- gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
- gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
- gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
- gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
- gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
- gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
- gap/pkg/semigroups/gap/elements/star.gd +21 -0
- gap/pkg/semigroups/gap/elements/star.gi +21 -0
- gap/pkg/semigroups/gap/elements/trans.gd +13 -0
- gap/pkg/semigroups/gap/elements/trans.gi +50 -0
- gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
- gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
- gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
- gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
- gap/pkg/semigroups/gap/fp/word.gd +15 -0
- gap/pkg/semigroups/gap/fp/word.gi +67 -0
- gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
- gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
- gap/pkg/semigroups/gap/greens/acting.gd +81 -0
- gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
- gap/pkg/semigroups/gap/greens/generic.gd +117 -0
- gap/pkg/semigroups/gap/greens/generic.gi +630 -0
- gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
- gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
- gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
- gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
- gap/pkg/semigroups/gap/main/acting.gd +36 -0
- gap/pkg/semigroups/gap/main/acting.gi +779 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
- gap/pkg/semigroups/gap/main/graded.gd +26 -0
- gap/pkg/semigroups/gap/main/graded.gi +355 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
- gap/pkg/semigroups/gap/main/orbits.gd +24 -0
- gap/pkg/semigroups/gap/main/orbits.gi +512 -0
- gap/pkg/semigroups/gap/main/semiact.gd +20 -0
- gap/pkg/semigroups/gap/main/semiact.gi +821 -0
- gap/pkg/semigroups/gap/main/setup.gd +61 -0
- gap/pkg/semigroups/gap/main/setup.gi +1094 -0
- gap/pkg/semigroups/gap/obsolete.gd +9 -0
- gap/pkg/semigroups/gap/obsolete.gi +14 -0
- gap/pkg/semigroups/gap/options.g +55 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
- gap/pkg/semigroups/gap/tools/display.gd +24 -0
- gap/pkg/semigroups/gap/tools/display.gi +749 -0
- gap/pkg/semigroups/gap/tools/io.gd +17 -0
- gap/pkg/semigroups/gap/tools/io.gi +543 -0
- gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
- gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
- gap/pkg/semigroups/gap/tools/utils.gd +19 -0
- gap/pkg/semigroups/gap/tools/utils.gi +756 -0
- gap/pkg/semigroups/gapbind14/.ccls +18 -0
- gap/pkg/semigroups/gapbind14/.clang-format +104 -0
- gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
- gap/pkg/semigroups/gapbind14/LICENSE +674 -0
- gap/pkg/semigroups/gapbind14/README.md +76 -0
- gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
- gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
- gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
- gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
- gap/pkg/semigroups/gapbind14/demo/configure +34 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
- gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
- gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
- gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
- gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
- gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
- gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
- gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
- gap/pkg/semigroups/init.g +150 -0
- gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
- gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
- gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
- gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
- gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
- gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
- gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
- gap/pkg/semigroups/m4/find_gap.m4 +94 -0
- gap/pkg/semigroups/makedoc.g +153 -0
- gap/pkg/semigroups/prerequisites.sh +62 -0
- gap/pkg/semigroups/read.g +105 -0
- gap/pkg/semigroups/release.toml +6 -0
- gap/pkg/semigroups/tst/extreme/README +2 -0
- gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
- gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
- gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
- gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
- gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
- gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
- gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
- gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
- gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
- gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
- gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
- gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
- gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
- gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
- gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
- gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
- gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
- gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
- gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
- gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
- gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
- gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
- gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
- gap/pkg/semigroups/tst/standard/README +2 -0
- gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
- gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
- gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
- gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
- gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
- gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
- gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
- gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
- gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
- gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
- gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
- gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
- gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
- gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
- gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
- gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
- gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
- gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
- gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
- gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
- gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
- gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
- gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
- gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
- gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
- gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
- gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
- gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
- gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
- gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
- gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
- gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
- gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
- gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
- gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
- gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
- gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
- gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
- gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
- gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
- gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
- gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
- gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
- gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
- gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
- gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
- gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
- gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
- gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
- gap/pkg/semigroups/tst/standard/options.tst +54 -0
- gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
- gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
- gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
- gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
- gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
- gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
- gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
- gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
- gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
- gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
- gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
- gap/pkg/semigroups/tst/testinstall.tst +1815 -0
- gap/pkg/semigroups/tst/teststandard.g +22 -0
- gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
- gap/pkg/semigroups/tst/workspaces/load.g +11 -0
- gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
- gap/pkg/semigroups/tst/workspaces/save.g +14 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA +93 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +354 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +6 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
- passagemath_gap_pkg_semigroups.dylibs/libsemigroups.2.dylib +0 -0
- sage/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/gap_pkg_semigroups.abi3.so +0 -0
|
@@ -0,0 +1,779 @@
|
|
|
1
|
+
############################################################################
|
|
2
|
+
##
|
|
3
|
+
## main/acting.gi
|
|
4
|
+
## Copyright (C) 2013-2022 James D. Mitchell
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
# local declarations . . .
|
|
12
|
+
|
|
13
|
+
# acting semigroups...
|
|
14
|
+
|
|
15
|
+
# same method for ideals
|
|
16
|
+
|
|
17
|
+
InstallMethod(SemigroupData, "for an acting inverse semigroup rep",
|
|
18
|
+
[IsInverseActingSemigroupRep], ReturnFail);
|
|
19
|
+
|
|
20
|
+
# different method for ideals
|
|
21
|
+
|
|
22
|
+
InstallMethod(SemigroupData, "for an acting semigroup and lambda orb",
|
|
23
|
+
[IsActingSemigroup, IsLambdaOrb],
|
|
24
|
+
function(S, lambda_orb)
|
|
25
|
+
local gens, data;
|
|
26
|
+
|
|
27
|
+
gens := List(GeneratorsOfSemigroup(S), x -> ConvertToInternalElement(S, x));
|
|
28
|
+
|
|
29
|
+
data := rec(gens := gens,
|
|
30
|
+
genstoapply := [1 .. Length(gens)],
|
|
31
|
+
graph := [EmptyPlist(Length(gens))],
|
|
32
|
+
ht := HTCreate(gens[1], rec(treehashsize :=
|
|
33
|
+
SEMIGROUPS.OptionsRec(S).hashlen)),
|
|
34
|
+
init := false,
|
|
35
|
+
lambda_orb := lambda_orb,
|
|
36
|
+
lambdarhoht := [],
|
|
37
|
+
lenreps := [0],
|
|
38
|
+
orbit := [[,,, FakeOne(gens)]],
|
|
39
|
+
orblookup1 := [],
|
|
40
|
+
orblookup2 := [],
|
|
41
|
+
parent := S,
|
|
42
|
+
pos := 0,
|
|
43
|
+
reps := [],
|
|
44
|
+
repslens := [],
|
|
45
|
+
repslookup := [],
|
|
46
|
+
rholookup := [1],
|
|
47
|
+
schreiergen := [fail],
|
|
48
|
+
schreiermult := [fail],
|
|
49
|
+
schreierpos := [fail],
|
|
50
|
+
stopper := false);
|
|
51
|
+
|
|
52
|
+
Objectify(NewType(FamilyObj(S), IsSemigroupData), data);
|
|
53
|
+
|
|
54
|
+
return data;
|
|
55
|
+
end);
|
|
56
|
+
|
|
57
|
+
InstallMethod(SemigroupData, "for an acting semigroup",
|
|
58
|
+
[IsActingSemigroup], S -> SemigroupData(S, LambdaOrb(S)));
|
|
59
|
+
|
|
60
|
+
# different method for regular ideals, regular/inverse semigroups, same method
|
|
61
|
+
# for non-regular ideals
|
|
62
|
+
|
|
63
|
+
InstallMethod(\in,
|
|
64
|
+
"for a multiplicative element and acting semigroup",
|
|
65
|
+
[IsMultiplicativeElement, IsActingSemigroup],
|
|
66
|
+
function(x, S)
|
|
67
|
+
local data, ht, lambda, lambdao, l, m, rho, rhoo, lambdarhoht, rholookup,
|
|
68
|
+
new, lookfunc, schutz, ind, reps, repslens, bound, max, membership,
|
|
69
|
+
lambdaperm, n, found, i;
|
|
70
|
+
|
|
71
|
+
if ElementsFamily(FamilyObj(S)) <> FamilyObj(x)
|
|
72
|
+
or (IsActingSemigroupWithFixedDegreeMultiplication(S)
|
|
73
|
+
and ActionDegree(x) <> ActionDegree(S))
|
|
74
|
+
or (ActionDegree(x) > ActionDegree(S)) then
|
|
75
|
+
return false;
|
|
76
|
+
elif HasFroidurePin(S) and Position(S, x) <> fail then
|
|
77
|
+
# check if x is already known to be in S
|
|
78
|
+
return true;
|
|
79
|
+
elif HasFroidurePin(S) and IsEnumerated(S) then
|
|
80
|
+
return false;
|
|
81
|
+
elif not (IsMonoid(S) and IsOne(x)) then
|
|
82
|
+
if Length(Generators(S)) > 0
|
|
83
|
+
and ActionRank(S)(x) >
|
|
84
|
+
MaximumList(List(Generators(S), y -> ActionRank(S)(y))) then
|
|
85
|
+
return false;
|
|
86
|
+
fi;
|
|
87
|
+
fi;
|
|
88
|
+
|
|
89
|
+
if HasMinimalIdeal(S) then
|
|
90
|
+
if ActionRank(S)(x) < ActionRank(S)(Representative(MinimalIdeal(S))) then
|
|
91
|
+
return false;
|
|
92
|
+
fi;
|
|
93
|
+
fi;
|
|
94
|
+
|
|
95
|
+
x := ConvertToInternalElement(S, x);
|
|
96
|
+
|
|
97
|
+
data := SemigroupData(S);
|
|
98
|
+
ht := data!.ht;
|
|
99
|
+
|
|
100
|
+
# look for lambda!
|
|
101
|
+
lambda := LambdaFunc(S)(x);
|
|
102
|
+
lambdao := LambdaOrb(S);
|
|
103
|
+
if not IsClosedOrbit(lambdao) then
|
|
104
|
+
Enumerate(lambdao, infinity);
|
|
105
|
+
fi;
|
|
106
|
+
|
|
107
|
+
l := Position(lambdao, lambda);
|
|
108
|
+
|
|
109
|
+
if l = fail then
|
|
110
|
+
return false;
|
|
111
|
+
fi;
|
|
112
|
+
|
|
113
|
+
# strongly connected component of lambda orb
|
|
114
|
+
m := OrbSCCLookup(lambdao)[l];
|
|
115
|
+
|
|
116
|
+
# make sure lambda of x is in the first place of its scc
|
|
117
|
+
if l <> OrbSCC(lambdao)[m][1] then
|
|
118
|
+
x := x * LambdaOrbMult(lambdao, m, l)[2];
|
|
119
|
+
fi;
|
|
120
|
+
|
|
121
|
+
# check if x is an existing R-rep
|
|
122
|
+
if HTValue(ht, x) <> fail then
|
|
123
|
+
return true;
|
|
124
|
+
fi;
|
|
125
|
+
|
|
126
|
+
# check if rho is already known
|
|
127
|
+
rho := RhoFunc(S)(x);
|
|
128
|
+
rhoo := RhoOrb(S);
|
|
129
|
+
l := Position(rhoo, rho);
|
|
130
|
+
lambdarhoht := data!.lambdarhoht;
|
|
131
|
+
rholookup := data!.rholookup;
|
|
132
|
+
|
|
133
|
+
new := false;
|
|
134
|
+
|
|
135
|
+
if l = fail then
|
|
136
|
+
# rho is not already known, so we look for it
|
|
137
|
+
if IsClosedOrbit(rhoo) then
|
|
138
|
+
return false;
|
|
139
|
+
fi;
|
|
140
|
+
|
|
141
|
+
lookfunc := {_, x} -> rhoo[rholookup[x[6]]] = rho;
|
|
142
|
+
|
|
143
|
+
data := Enumerate(data, infinity, lookfunc);
|
|
144
|
+
l := PositionOfFound(data);
|
|
145
|
+
|
|
146
|
+
# rho is not found, so x not in S
|
|
147
|
+
if l = false then
|
|
148
|
+
return false;
|
|
149
|
+
fi;
|
|
150
|
+
l := rholookup[l];
|
|
151
|
+
new := true;
|
|
152
|
+
fi;
|
|
153
|
+
|
|
154
|
+
if not IsBound(lambdarhoht[l]) or not IsBound(lambdarhoht[l][m]) then
|
|
155
|
+
new := true;
|
|
156
|
+
# lambda-rho-combination not yet seen
|
|
157
|
+
if IsClosedData(data) then
|
|
158
|
+
return false;
|
|
159
|
+
fi;
|
|
160
|
+
|
|
161
|
+
lookfunc :=
|
|
162
|
+
{data, x} -> IsBound(lambdarhoht[l]) and IsBound(lambdarhoht[l][m]);
|
|
163
|
+
|
|
164
|
+
data := Enumerate(data, infinity, lookfunc);
|
|
165
|
+
|
|
166
|
+
if not IsBound(lambdarhoht[l]) or not IsBound(lambdarhoht[l][m]) then
|
|
167
|
+
return false;
|
|
168
|
+
fi;
|
|
169
|
+
fi;
|
|
170
|
+
|
|
171
|
+
schutz := LambdaOrbStabChain(lambdao, m);
|
|
172
|
+
ind := lambdarhoht[l][m];
|
|
173
|
+
# the index of the list of reps with same lambda-rho value as x.
|
|
174
|
+
|
|
175
|
+
# if the Schutzenberger group is the symmetric group, then x in S!
|
|
176
|
+
if schutz = true then
|
|
177
|
+
return true;
|
|
178
|
+
fi;
|
|
179
|
+
|
|
180
|
+
reps := data!.reps;
|
|
181
|
+
repslens := data!.repslens;
|
|
182
|
+
|
|
183
|
+
bound := LambdaBound(S)(LambdaRank(S)(lambda));
|
|
184
|
+
if IsPosInt(bound) then
|
|
185
|
+
max := bound / Size(LambdaOrbSchutzGp(lambdao, m));
|
|
186
|
+
else
|
|
187
|
+
max := bound;
|
|
188
|
+
fi;
|
|
189
|
+
|
|
190
|
+
if repslens[m][ind] = max then
|
|
191
|
+
return true;
|
|
192
|
+
fi;
|
|
193
|
+
|
|
194
|
+
membership := SchutzGpMembership(S);
|
|
195
|
+
|
|
196
|
+
# if schutz is false, then f has to be an R-rep which it is not...
|
|
197
|
+
if schutz <> false then
|
|
198
|
+
# check if x already corresponds to an element of reps[m][ind]
|
|
199
|
+
lambdaperm := LambdaPerm(S);
|
|
200
|
+
for n in [1 .. repslens[m][ind]] do
|
|
201
|
+
if membership(schutz, lambdaperm(reps[m][ind][n], x)) then
|
|
202
|
+
return true;
|
|
203
|
+
fi;
|
|
204
|
+
od;
|
|
205
|
+
elif new and HTValue(ht, x) <> fail then
|
|
206
|
+
return true;
|
|
207
|
+
fi;
|
|
208
|
+
|
|
209
|
+
if IsClosedData(data) then
|
|
210
|
+
return false;
|
|
211
|
+
elif repslens[m][ind] < max then
|
|
212
|
+
# enumerate until we find f or finish
|
|
213
|
+
n := repslens[m][ind];
|
|
214
|
+
lookfunc := {data, x} -> repslens[m][ind] > n;
|
|
215
|
+
if schutz = false then
|
|
216
|
+
repeat
|
|
217
|
+
# look for more R-reps with same lambda-rho value
|
|
218
|
+
data := Enumerate(data, infinity, lookfunc);
|
|
219
|
+
found := data!.found;
|
|
220
|
+
if found <> false then
|
|
221
|
+
if repslens[m][ind] = max or x = data[found][4] then
|
|
222
|
+
return true;
|
|
223
|
+
fi;
|
|
224
|
+
fi;
|
|
225
|
+
until found = false;
|
|
226
|
+
else
|
|
227
|
+
repeat
|
|
228
|
+
# look for more R-reps with same lambda-rho value
|
|
229
|
+
data := Enumerate(data, infinity, lookfunc);
|
|
230
|
+
found := data!.found;
|
|
231
|
+
if found <> false then
|
|
232
|
+
if repslens[m][ind] = max then
|
|
233
|
+
return true;
|
|
234
|
+
fi;
|
|
235
|
+
for i in [n + 1 .. repslens[m][ind]] do
|
|
236
|
+
if membership(schutz, lambdaperm(reps[m][ind][i], x)) then
|
|
237
|
+
return true;
|
|
238
|
+
fi;
|
|
239
|
+
od;
|
|
240
|
+
n := repslens[m][ind];
|
|
241
|
+
fi;
|
|
242
|
+
until found = false;
|
|
243
|
+
fi;
|
|
244
|
+
fi;
|
|
245
|
+
return false;
|
|
246
|
+
end);
|
|
247
|
+
|
|
248
|
+
# different for regular/inverse/ideals
|
|
249
|
+
|
|
250
|
+
InstallMethod(Size, "for an acting semigroup",
|
|
251
|
+
[IsActingSemigroup], 2, # to beat the method for a Rees 0-matrix semigroup
|
|
252
|
+
function(S)
|
|
253
|
+
local data, lenreps, repslens, o, scc, size, n, m, i;
|
|
254
|
+
|
|
255
|
+
data := Enumerate(SemigroupData(S), infinity, ReturnFalse);
|
|
256
|
+
lenreps := data!.lenreps;
|
|
257
|
+
repslens := data!.repslens;
|
|
258
|
+
o := LambdaOrb(S);
|
|
259
|
+
scc := OrbSCC(o);
|
|
260
|
+
|
|
261
|
+
size := 0;
|
|
262
|
+
|
|
263
|
+
for m in [2 .. Length(scc)] do
|
|
264
|
+
n := Size(LambdaOrbSchutzGp(o, m)) * Length(scc[m]);
|
|
265
|
+
for i in [1 .. lenreps[m]] do
|
|
266
|
+
size := size + n * repslens[m][i];
|
|
267
|
+
od;
|
|
268
|
+
od;
|
|
269
|
+
|
|
270
|
+
return size;
|
|
271
|
+
end);
|
|
272
|
+
|
|
273
|
+
# data...
|
|
274
|
+
|
|
275
|
+
# same method for ideals
|
|
276
|
+
|
|
277
|
+
InstallMethod(\in, "for a multiplicative element and semigroup data",
|
|
278
|
+
[IsMultiplicativeElement, IsSemigroupData],
|
|
279
|
+
{f, data} -> not Position(data, f) = fail);
|
|
280
|
+
|
|
281
|
+
# same method for ideals
|
|
282
|
+
|
|
283
|
+
InstallMethod(ELM_LIST, "for semigroup data, and pos int",
|
|
284
|
+
[IsSemigroupData, IsPosInt],
|
|
285
|
+
{o, nr} -> o!.orbit[nr]);
|
|
286
|
+
|
|
287
|
+
# same method for ideals
|
|
288
|
+
|
|
289
|
+
InstallMethod(Length, "for semigroup data", [IsSemigroupData],
|
|
290
|
+
data -> Length(data!.orbit));
|
|
291
|
+
|
|
292
|
+
# same method for ideals
|
|
293
|
+
|
|
294
|
+
InstallMethod(Enumerate, "for semigroup data", [IsSemigroupData],
|
|
295
|
+
data -> Enumerate(data, infinity, ReturnFalse));
|
|
296
|
+
|
|
297
|
+
# same method for ideals
|
|
298
|
+
|
|
299
|
+
InstallMethod(Enumerate, "for semigroup data and limit",
|
|
300
|
+
[IsSemigroupData, IsCyclotomic],
|
|
301
|
+
{data, limit} -> Enumerate(data, limit, ReturnFalse));
|
|
302
|
+
|
|
303
|
+
# different method for ideals...
|
|
304
|
+
|
|
305
|
+
# JDM: this has the same problem as orb in Issue #4, the log is not properly
|
|
306
|
+
# formed if the enumeration stops early.
|
|
307
|
+
|
|
308
|
+
InstallMethod(Enumerate,
|
|
309
|
+
"for an semigroup data, limit, and func",
|
|
310
|
+
[IsSemigroupData, IsCyclotomic, IsFunction],
|
|
311
|
+
function(data, limit, lookfunc)
|
|
312
|
+
local looking, ht, orb, nr, i, graph, reps, repslens, lenreps, lambdarhoht,
|
|
313
|
+
repslookup, orblookup1, orblookup2, rholookup, stopper, schreierpos,
|
|
314
|
+
schreiergen, schreiermult, gens, nrgens, genstoapply, s, lambda,
|
|
315
|
+
lambdaperm, o, oht, scc, lookup, membership, rho, rho_o, rho_orb, rho_nr,
|
|
316
|
+
rho_ht, rho_schreiergen, rho_schreierpos, rho_log, rho_logind, rho_logpos,
|
|
317
|
+
rho_depth, rho_depthmarks, rho_orbitgraph, htadd, htvalue, suc, x, pos, m,
|
|
318
|
+
rhox, l, ind, pt, schutz, data_val, old, j, n;
|
|
319
|
+
|
|
320
|
+
if lookfunc <> ReturnFalse then
|
|
321
|
+
looking := true;
|
|
322
|
+
else
|
|
323
|
+
looking := false;
|
|
324
|
+
fi;
|
|
325
|
+
|
|
326
|
+
if IsClosedData(data) then
|
|
327
|
+
if looking then
|
|
328
|
+
data!.found := false;
|
|
329
|
+
fi;
|
|
330
|
+
return data;
|
|
331
|
+
fi;
|
|
332
|
+
|
|
333
|
+
data!.looking := looking;
|
|
334
|
+
|
|
335
|
+
ht := data!.ht; # so far found R-reps
|
|
336
|
+
orb := data!.orbit; # the so far found R-reps data
|
|
337
|
+
nr := Length(orb);
|
|
338
|
+
i := data!.pos; # points in orb in position at most i have descendants
|
|
339
|
+
graph := data!.graph; # orbit graph of orbit of R-classes under left mult
|
|
340
|
+
reps := data!.reps; # reps grouped by equal lambda-scc-index and
|
|
341
|
+
# rho-value-index
|
|
342
|
+
|
|
343
|
+
repslens := data!.repslens; # Length(reps[m][i])=repslens[m][i]
|
|
344
|
+
lenreps := data!.lenreps; # lenreps[m]=Length(reps[m])
|
|
345
|
+
|
|
346
|
+
lambdarhoht := data!.lambdarhoht; # HTValue(lambdarhoht, [m,l])=position
|
|
347
|
+
# in reps[m] of R-reps with
|
|
348
|
+
# lambda-scc-index=m and rho-value-index=l
|
|
349
|
+
|
|
350
|
+
repslookup := data!.repslookup; # Position(orb, reps[m][i][j])
|
|
351
|
+
# = repslookup[m][i][j]
|
|
352
|
+
# = HTValue(ht, reps[m][i][j])
|
|
353
|
+
|
|
354
|
+
orblookup1 := data!.orblookup1; # orblookup1[i] position in reps[m]
|
|
355
|
+
# containing orb[i][4] (the R-rep)
|
|
356
|
+
|
|
357
|
+
orblookup2 := data!.orblookup2; # orblookup2[i] position in
|
|
358
|
+
# reps[m][orblookup1[i]]
|
|
359
|
+
# containing orb[i][4] (the R-rep)
|
|
360
|
+
|
|
361
|
+
rholookup := data!.rholookup; # rholookup[i]=rho-value-index of orb[i][4]
|
|
362
|
+
|
|
363
|
+
stopper := data!.stopper; # stop at this place in the orbit
|
|
364
|
+
|
|
365
|
+
# schreier
|
|
366
|
+
schreierpos := data!.schreierpos;
|
|
367
|
+
schreiergen := data!.schreiergen;
|
|
368
|
+
schreiermult := data!.schreiermult;
|
|
369
|
+
|
|
370
|
+
# generators
|
|
371
|
+
gens := data!.gens;
|
|
372
|
+
nrgens := Length(gens);
|
|
373
|
+
genstoapply := data!.genstoapply;
|
|
374
|
+
|
|
375
|
+
# lambda
|
|
376
|
+
s := data!.parent;
|
|
377
|
+
lambda := LambdaFunc(s);
|
|
378
|
+
lambdaperm := LambdaPerm(s);
|
|
379
|
+
|
|
380
|
+
o := data!.lambda_orb;
|
|
381
|
+
oht := o!.ht;
|
|
382
|
+
scc := OrbSCC(o);
|
|
383
|
+
lookup := o!.scc_lookup;
|
|
384
|
+
|
|
385
|
+
membership := SchutzGpMembership(s);
|
|
386
|
+
|
|
387
|
+
# rho
|
|
388
|
+
rho := RhoFunc(s);
|
|
389
|
+
rho_o := RhoOrb(s);
|
|
390
|
+
rho_orb := rho_o!.orbit;
|
|
391
|
+
rho_nr := Length(rho_orb);
|
|
392
|
+
rho_ht := rho_o!.ht;
|
|
393
|
+
rho_schreiergen := rho_o!.schreiergen;
|
|
394
|
+
rho_schreierpos := rho_o!.schreierpos;
|
|
395
|
+
|
|
396
|
+
rho_log := rho_o!.log;
|
|
397
|
+
rho_logind := rho_o!.logind;
|
|
398
|
+
rho_logpos := rho_o!.logpos;
|
|
399
|
+
rho_depth := rho_o!.depth;
|
|
400
|
+
rho_depthmarks := rho_o!.depthmarks;
|
|
401
|
+
|
|
402
|
+
rho_orbitgraph := rho_o!.orbitgraph;
|
|
403
|
+
|
|
404
|
+
# initialise the data if necessary
|
|
405
|
+
if data!.init = false then
|
|
406
|
+
for i in [2 .. Length(scc)] do
|
|
407
|
+
reps[i] := [];
|
|
408
|
+
repslookup[i] := [];
|
|
409
|
+
repslens[i] := [];
|
|
410
|
+
lenreps[i] := 0;
|
|
411
|
+
od;
|
|
412
|
+
data!.init := true;
|
|
413
|
+
i := data!.pos;
|
|
414
|
+
fi;
|
|
415
|
+
|
|
416
|
+
if IsBoundGlobal("ORBC") then
|
|
417
|
+
htadd := HTAdd_TreeHash_C;
|
|
418
|
+
htvalue := HTValue_TreeHash_C;
|
|
419
|
+
else
|
|
420
|
+
htadd := HTAdd;
|
|
421
|
+
htvalue := HTValue;
|
|
422
|
+
fi;
|
|
423
|
+
|
|
424
|
+
while nr <= limit and i < nr and i <> stopper do
|
|
425
|
+
|
|
426
|
+
i := i + 1;
|
|
427
|
+
|
|
428
|
+
# for the rho-orbit #
|
|
429
|
+
if rholookup[i] >= rho_depthmarks[rho_depth + 1] then
|
|
430
|
+
rho_depth := rho_depth + 1;
|
|
431
|
+
rho_depthmarks[rho_depth + 1] := rho_nr + 1;
|
|
432
|
+
fi;
|
|
433
|
+
rho_logind[rholookup[i]] := rho_logpos;
|
|
434
|
+
suc := false;
|
|
435
|
+
# #
|
|
436
|
+
|
|
437
|
+
for j in genstoapply do # JDM
|
|
438
|
+
x := gens[j] * orb[i][4];
|
|
439
|
+
pos := htvalue(oht, lambda(x));
|
|
440
|
+
m := lookup[pos]; # lambda-value-scc-index
|
|
441
|
+
|
|
442
|
+
# put lambda(x) in the first position in its scc
|
|
443
|
+
if pos <> scc[m][1] then
|
|
444
|
+
x := x * LambdaOrbMult(o, m, pos)[2];
|
|
445
|
+
fi;
|
|
446
|
+
|
|
447
|
+
rhox := rho(x);
|
|
448
|
+
l := htvalue(rho_ht, rhox);
|
|
449
|
+
|
|
450
|
+
if l = fail then # new rho-value, new R-rep
|
|
451
|
+
|
|
452
|
+
# update rho-orbit #
|
|
453
|
+
rho_nr := rho_nr + 1;
|
|
454
|
+
l := rho_nr;
|
|
455
|
+
rho_orb[rho_nr] := rhox;
|
|
456
|
+
htadd(rho_ht, rhox, rho_nr);
|
|
457
|
+
|
|
458
|
+
rho_orbitgraph[rho_nr] := EmptyPlist(nrgens);
|
|
459
|
+
rho_orbitgraph[rholookup[i]][j] := rho_nr;
|
|
460
|
+
|
|
461
|
+
rho_schreiergen[rho_nr] := j;
|
|
462
|
+
rho_schreierpos[rho_nr] := rholookup[i];
|
|
463
|
+
|
|
464
|
+
suc := true;
|
|
465
|
+
rho_log[rho_logpos] := j;
|
|
466
|
+
rho_log[rho_logpos + 1] := rho_nr;
|
|
467
|
+
rho_logpos := rho_logpos + 2;
|
|
468
|
+
rho_o!.logpos := rho_logpos;
|
|
469
|
+
# #
|
|
470
|
+
|
|
471
|
+
nr := nr + 1;
|
|
472
|
+
lenreps[m] := lenreps[m] + 1;
|
|
473
|
+
ind := lenreps[m];
|
|
474
|
+
lambdarhoht[l] := [];
|
|
475
|
+
lambdarhoht[l][m] := ind;
|
|
476
|
+
|
|
477
|
+
reps[m][ind] := [x];
|
|
478
|
+
repslookup[m][ind] := [nr];
|
|
479
|
+
repslens[m][ind] := 1;
|
|
480
|
+
|
|
481
|
+
orblookup1[nr] := ind;
|
|
482
|
+
orblookup2[nr] := 1;
|
|
483
|
+
|
|
484
|
+
pt := [s, m, o, x, false, nr];
|
|
485
|
+
# semigroup, lambda orb scc index, lambda orb, rep,
|
|
486
|
+
# IsGreensClassNC, index in orbit
|
|
487
|
+
|
|
488
|
+
elif not IsBound(lambdarhoht[l]) then
|
|
489
|
+
# old rho-value, but new lambda-rho-combination
|
|
490
|
+
# update rho orbit graph
|
|
491
|
+
rho_orbitgraph[rholookup[i]][j] := l;
|
|
492
|
+
nr := nr + 1;
|
|
493
|
+
lenreps[m] := lenreps[m] + 1;
|
|
494
|
+
ind := lenreps[m];
|
|
495
|
+
lambdarhoht[l] := [];
|
|
496
|
+
lambdarhoht[l][m] := ind;
|
|
497
|
+
|
|
498
|
+
reps[m][ind] := [x];
|
|
499
|
+
repslookup[m][ind] := [nr];
|
|
500
|
+
repslens[m][ind] := 1;
|
|
501
|
+
|
|
502
|
+
orblookup1[nr] := ind;
|
|
503
|
+
orblookup2[nr] := 1;
|
|
504
|
+
|
|
505
|
+
pt := [s, m, o, x, false, nr];
|
|
506
|
+
elif not IsBound(lambdarhoht[l][m]) then
|
|
507
|
+
# old rho-value, but new lambda-rho-combination
|
|
508
|
+
|
|
509
|
+
# update rho orbit graph
|
|
510
|
+
rho_orbitgraph[rholookup[i]][j] := l;
|
|
511
|
+
|
|
512
|
+
nr := nr + 1;
|
|
513
|
+
lenreps[m] := lenreps[m] + 1;
|
|
514
|
+
ind := lenreps[m];
|
|
515
|
+
lambdarhoht[l][m] := ind;
|
|
516
|
+
|
|
517
|
+
reps[m][ind] := [x];
|
|
518
|
+
repslookup[m][ind] := [nr];
|
|
519
|
+
repslens[m][ind] := 1;
|
|
520
|
+
|
|
521
|
+
orblookup1[nr] := ind;
|
|
522
|
+
orblookup2[nr] := 1;
|
|
523
|
+
|
|
524
|
+
pt := [s, m, o, x, false, nr];
|
|
525
|
+
else
|
|
526
|
+
# old lambda-rho combination
|
|
527
|
+
ind := lambdarhoht[l][m];
|
|
528
|
+
pt := [s, m, o, x, false, nr + 1];
|
|
529
|
+
|
|
530
|
+
# check membership in Schutzenberger group via stabiliser chain
|
|
531
|
+
schutz := LambdaOrbStabChain(o, m);
|
|
532
|
+
|
|
533
|
+
if schutz = true then
|
|
534
|
+
# the Schutzenberger group is the symmetric group
|
|
535
|
+
graph[i][j] := repslookup[m][ind][1];
|
|
536
|
+
rho_orbitgraph[rholookup[i]][j] := l;
|
|
537
|
+
continue;
|
|
538
|
+
else
|
|
539
|
+
if schutz = false then
|
|
540
|
+
# the Schutzenberger group is trivial
|
|
541
|
+
data_val := htvalue(ht, x);
|
|
542
|
+
if data_val <> fail then
|
|
543
|
+
graph[i][j] := data_val;
|
|
544
|
+
rho_orbitgraph[rholookup[i]][j] := l;
|
|
545
|
+
continue;
|
|
546
|
+
fi;
|
|
547
|
+
else
|
|
548
|
+
# the Schutzenberger group is neither trivial nor symmetric group
|
|
549
|
+
old := false;
|
|
550
|
+
for n in [1 .. repslens[m][ind]] do
|
|
551
|
+
if membership(schutz, lambdaperm(reps[m][ind][n], x)) then
|
|
552
|
+
old := true;
|
|
553
|
+
graph[i][j] := repslookup[m][ind][n];
|
|
554
|
+
rho_orbitgraph[rholookup[i]][j] := l;
|
|
555
|
+
break;
|
|
556
|
+
fi;
|
|
557
|
+
od;
|
|
558
|
+
if old then
|
|
559
|
+
continue;
|
|
560
|
+
fi;
|
|
561
|
+
fi;
|
|
562
|
+
nr := nr + 1;
|
|
563
|
+
repslens[m][ind] := repslens[m][ind] + 1;
|
|
564
|
+
reps[m][ind][repslens[m][ind]] := x;
|
|
565
|
+
repslookup[m][ind][repslens[m][ind]] := nr;
|
|
566
|
+
orblookup1[nr] := ind;
|
|
567
|
+
orblookup2[nr] := repslens[m][ind];
|
|
568
|
+
# update rho orbit graph and rholookup
|
|
569
|
+
rho_orbitgraph[rholookup[i]][j] := l;
|
|
570
|
+
fi;
|
|
571
|
+
fi;
|
|
572
|
+
rholookup[nr] := l; # orb[nr] has rho-value in position l of the rho-orb
|
|
573
|
+
|
|
574
|
+
orb[nr] := pt;
|
|
575
|
+
schreierpos[nr] := i; # orb[nr] is obtained from orb[i]
|
|
576
|
+
schreiergen[nr] := j; # by multiplying by gens[j]
|
|
577
|
+
schreiermult[nr] := pos; # and ends up in position <pos> of
|
|
578
|
+
# its lambda orb
|
|
579
|
+
htadd(ht, x, nr);
|
|
580
|
+
graph[nr] := EmptyPlist(nrgens);
|
|
581
|
+
graph[i][j] := nr;
|
|
582
|
+
|
|
583
|
+
# are we looking for something?
|
|
584
|
+
if looking then
|
|
585
|
+
# did we find it?
|
|
586
|
+
data!.pos := i - 1;
|
|
587
|
+
if lookfunc(data, pt) then
|
|
588
|
+
data!.found := nr;
|
|
589
|
+
rho_o!.depth := rho_depth;
|
|
590
|
+
return data;
|
|
591
|
+
fi;
|
|
592
|
+
fi;
|
|
593
|
+
od;
|
|
594
|
+
|
|
595
|
+
# for the rho-orbit
|
|
596
|
+
if suc then
|
|
597
|
+
rho_log[rho_logpos - 2] := -rho_log[rho_logpos - 2];
|
|
598
|
+
else
|
|
599
|
+
rho_logind[rholookup[i]] := 0;
|
|
600
|
+
fi;
|
|
601
|
+
|
|
602
|
+
od;
|
|
603
|
+
|
|
604
|
+
# for the data-orbit
|
|
605
|
+
data!.pos := i;
|
|
606
|
+
|
|
607
|
+
if looking then
|
|
608
|
+
data!.found := false;
|
|
609
|
+
fi;
|
|
610
|
+
if nr = i then
|
|
611
|
+
SetFilterObj(data, IsClosedData);
|
|
612
|
+
SetFilterObj(rho_o, IsClosedOrbit);
|
|
613
|
+
rho_o!.orbind := [1 .. rho_nr];
|
|
614
|
+
fi;
|
|
615
|
+
|
|
616
|
+
# for the rho-orbit
|
|
617
|
+
if i <> 0 then
|
|
618
|
+
rho_o!.pos := rholookup[i];
|
|
619
|
+
rho_o!.depth := rho_depth;
|
|
620
|
+
fi;
|
|
621
|
+
|
|
622
|
+
return data;
|
|
623
|
+
end);
|
|
624
|
+
|
|
625
|
+
# not currently applicable for ideals
|
|
626
|
+
|
|
627
|
+
InstallMethod(OrbitGraph, "for semigroup data",
|
|
628
|
+
[IsSemigroupData], data -> data!.graph);
|
|
629
|
+
|
|
630
|
+
# not currently applicable for ideals
|
|
631
|
+
|
|
632
|
+
InstallMethod(OrbitGraphAsSets, "for semigroup data",
|
|
633
|
+
[IsSemigroupData], data -> List(data!.graph, Set));
|
|
634
|
+
|
|
635
|
+
# returns the index of the representative of the R-class containing x in the
|
|
636
|
+
# parent of data. Note that this depends on the state of the data, it only
|
|
637
|
+
# tells you if it is there already, it doesn't try to find it.
|
|
638
|
+
|
|
639
|
+
# same method for ideals
|
|
640
|
+
|
|
641
|
+
InstallMethod(Position,
|
|
642
|
+
"for semigroup data, multiplicative element, and zero cyc",
|
|
643
|
+
[IsSemigroupData, IsMultiplicativeElement, IsZeroCyc],
|
|
644
|
+
function(data, x, n)
|
|
645
|
+
local S, o, l, m, val, schutz, lambdarhoht, ind, repslookup, reps, repslens,
|
|
646
|
+
membership, lambdaperm;
|
|
647
|
+
|
|
648
|
+
S := data!.parent;
|
|
649
|
+
x := ConvertToInternalElement(S, x);
|
|
650
|
+
o := data!.lambda_orb;
|
|
651
|
+
l := Position(o, LambdaFunc(S)(x));
|
|
652
|
+
|
|
653
|
+
if l = fail then
|
|
654
|
+
return fail;
|
|
655
|
+
fi;
|
|
656
|
+
|
|
657
|
+
m := OrbSCCLookup(o)[l];
|
|
658
|
+
|
|
659
|
+
if l <> OrbSCC(o)[m][1] then
|
|
660
|
+
x := x * LambdaOrbMult(o, m, l)[2];
|
|
661
|
+
fi;
|
|
662
|
+
|
|
663
|
+
val := HTValue(data!.ht, x);
|
|
664
|
+
schutz := LambdaOrbStabChain(o, m);
|
|
665
|
+
|
|
666
|
+
if val <> fail then
|
|
667
|
+
return val;
|
|
668
|
+
elif schutz = false then
|
|
669
|
+
return fail;
|
|
670
|
+
fi;
|
|
671
|
+
|
|
672
|
+
l := Position(RhoOrb(S), RhoFunc(S)(x));
|
|
673
|
+
|
|
674
|
+
if l = fail then
|
|
675
|
+
return fail;
|
|
676
|
+
fi;
|
|
677
|
+
|
|
678
|
+
lambdarhoht := data!.lambdarhoht;
|
|
679
|
+
|
|
680
|
+
if not IsBound(lambdarhoht[l]) or not IsBound(lambdarhoht[l][m]) then
|
|
681
|
+
return fail;
|
|
682
|
+
fi;
|
|
683
|
+
|
|
684
|
+
ind := lambdarhoht[l][m];
|
|
685
|
+
repslookup := data!.repslookup[m][ind];
|
|
686
|
+
|
|
687
|
+
if schutz = true then
|
|
688
|
+
return repslookup[1];
|
|
689
|
+
fi;
|
|
690
|
+
|
|
691
|
+
reps := data!.reps[m][ind];
|
|
692
|
+
repslens := data!.repslens[m][ind];
|
|
693
|
+
membership := SchutzGpMembership(S);
|
|
694
|
+
lambdaperm := LambdaPerm(S);
|
|
695
|
+
|
|
696
|
+
for n in [1 .. repslens] do
|
|
697
|
+
if membership(schutz, lambdaperm(reps[n], x)) then
|
|
698
|
+
return repslookup[n];
|
|
699
|
+
fi;
|
|
700
|
+
od;
|
|
701
|
+
return fail;
|
|
702
|
+
end);
|
|
703
|
+
|
|
704
|
+
InstallMethod(PositionOfFound, "for semigroup data",
|
|
705
|
+
[IsSemigroupData],
|
|
706
|
+
function(data)
|
|
707
|
+
if not(data!.looking) then
|
|
708
|
+
ErrorNoReturn("not looking for anything");
|
|
709
|
+
fi;
|
|
710
|
+
return data!.found;
|
|
711
|
+
end);
|
|
712
|
+
|
|
713
|
+
# same method for ideals
|
|
714
|
+
|
|
715
|
+
BindGlobal("SizeOfSemigroupData",
|
|
716
|
+
function(data)
|
|
717
|
+
local lenreps, repslens, o, scc, size, n, m, i;
|
|
718
|
+
|
|
719
|
+
if not IsSemigroupData(data) then
|
|
720
|
+
ErrorNoReturn("the argument must be a semigroup data object");
|
|
721
|
+
elif not data!.init then
|
|
722
|
+
return 0;
|
|
723
|
+
fi;
|
|
724
|
+
|
|
725
|
+
lenreps := data!.lenreps;
|
|
726
|
+
repslens := data!.repslens;
|
|
727
|
+
o := LambdaOrb(data!.parent);
|
|
728
|
+
scc := OrbSCC(o);
|
|
729
|
+
|
|
730
|
+
size := 0;
|
|
731
|
+
for m in [2 .. Length(scc)] do
|
|
732
|
+
n := Size(LambdaOrbSchutzGp(o, m)) * Length(scc[m]);
|
|
733
|
+
for i in [1 .. lenreps[m]] do
|
|
734
|
+
size := size + n * repslens[m][i];
|
|
735
|
+
od;
|
|
736
|
+
od;
|
|
737
|
+
return size;
|
|
738
|
+
end);
|
|
739
|
+
|
|
740
|
+
# different method for ideals
|
|
741
|
+
|
|
742
|
+
InstallMethod(ViewObj, [IsSemigroupData],
|
|
743
|
+
function(data)
|
|
744
|
+
Print("<");
|
|
745
|
+
|
|
746
|
+
if IsClosedData(data) then
|
|
747
|
+
Print("closed ");
|
|
748
|
+
else
|
|
749
|
+
Print("open ");
|
|
750
|
+
fi;
|
|
751
|
+
Print("semigroup ");
|
|
752
|
+
|
|
753
|
+
Print("data with ", Length(data!.orbit) - 1, " reps, ",
|
|
754
|
+
Length(LambdaOrb(data!.parent)) - 1, " lambda-values, ",
|
|
755
|
+
Length(RhoOrb(data!.parent)) - 1, " rho-values>");
|
|
756
|
+
return;
|
|
757
|
+
end);
|
|
758
|
+
|
|
759
|
+
# we require a fake one in the case that the objects we are dealing with don't
|
|
760
|
+
# have one.
|
|
761
|
+
|
|
762
|
+
InstallMethod(String, "for the universal fake one",
|
|
763
|
+
[SEMIGROUPS_IsUniversalFakeOne], obj -> "<universal fake one>");
|
|
764
|
+
|
|
765
|
+
InstallMethod(\*,
|
|
766
|
+
"for the universal fake one and a multiplicative element",
|
|
767
|
+
[SEMIGROUPS_IsUniversalFakeOne, IsMultiplicativeElement],
|
|
768
|
+
{x, y} -> y);
|
|
769
|
+
|
|
770
|
+
InstallMethod(\*,
|
|
771
|
+
"for a multiplicative element and the universal fake one",
|
|
772
|
+
[IsMultiplicativeElement, SEMIGROUPS_IsUniversalFakeOne],
|
|
773
|
+
ReturnFirst);
|
|
774
|
+
|
|
775
|
+
InstallMethod(\<, "for the universal fake one and a multiplicative element",
|
|
776
|
+
[SEMIGROUPS_IsUniversalFakeOne, IsMultiplicativeElement], ReturnTrue);
|
|
777
|
+
|
|
778
|
+
InstallMethod(\<, "for a multiplicative element and the universal fake one",
|
|
779
|
+
[IsMultiplicativeElement, SEMIGROUPS_IsUniversalFakeOne], ReturnFalse);
|