passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-musllinux_1_2_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-gap-pkg-semigroups might be problematic. Click here for more details.
- gap/pkg/semigroups/CHANGELOG.md +1699 -0
- gap/pkg/semigroups/CONTRIBUTING.md +91 -0
- gap/pkg/semigroups/GNUmakefile +110 -0
- gap/pkg/semigroups/GNUmakefile.in +110 -0
- gap/pkg/semigroups/GPL +674 -0
- gap/pkg/semigroups/LICENSE +16 -0
- gap/pkg/semigroups/Makefile +26 -0
- gap/pkg/semigroups/Makefile.gappkg +225 -0
- gap/pkg/semigroups/PackageInfo.g +529 -0
- gap/pkg/semigroups/README.md +102 -0
- gap/pkg/semigroups/VERSIONS +112 -0
- gap/pkg/semigroups/aclocal.m4 +375 -0
- gap/pkg/semigroups/autogen.sh +25 -0
- gap/pkg/semigroups/bin/aarch64-unknown-linux-musl-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1021 -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.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 +356 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +5 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
- passagemath_gap_pkg_semigroups.libs/libgcc_s-2d945d6c.so.1 +0 -0
- passagemath_gap_pkg_semigroups.libs/libsemigroups-81d76771.so.2.0.0 +0 -0
- passagemath_gap_pkg_semigroups.libs/libstdc++-85f2cd6d.so.6.0.33 +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,821 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## main/semiact.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
|
+
# The code coverage for this file is not as good as it could be.
|
|
12
|
+
|
|
13
|
+
SEMIGROUPS.ChangeDegreeOfTransformationSemigroup := function(o, old_deg, t)
|
|
14
|
+
local deg, extra, ht, max, i, orb;
|
|
15
|
+
deg := DegreeOfTransformationSemigroup(t);
|
|
16
|
+
orb := o!.orbit;
|
|
17
|
+
if IsLambdaOrb(o) then
|
|
18
|
+
# rehash the orbit values
|
|
19
|
+
extra := [old_deg + 1 .. deg];
|
|
20
|
+
ht := HTCreate(o[1], rec(treehashsize := o!.treehashsize));
|
|
21
|
+
# JDM: could make the treehashsize bigger if needed here!
|
|
22
|
+
HTAdd(ht, o[1], 1);
|
|
23
|
+
for i in [2 .. Length(o)] do
|
|
24
|
+
orb[i] := ShallowCopy(o[i]);
|
|
25
|
+
Append(o[i], extra);
|
|
26
|
+
HTAdd(ht, o[i], i);
|
|
27
|
+
od;
|
|
28
|
+
Unbind(o!.ht);
|
|
29
|
+
o!.ht := ht;
|
|
30
|
+
|
|
31
|
+
# change the action of <o> to that of <t>
|
|
32
|
+
o!.op := LambdaAct(t);
|
|
33
|
+
elif IsRhoOrb(o) then
|
|
34
|
+
ht := HTCreate(o[1], rec(treehashsize := o!.treehashsize));
|
|
35
|
+
# JDM: could make the treehashsize bigger if needed here!
|
|
36
|
+
HTAdd(ht, o[1], 1);
|
|
37
|
+
for i in [2 .. Length(o)] do
|
|
38
|
+
orb[i] := ShallowCopy(o[i]);
|
|
39
|
+
if not IsEmpty(o[i]) then
|
|
40
|
+
max := MaximumList(o[i]); # nr kernel classes
|
|
41
|
+
else
|
|
42
|
+
max := 0;
|
|
43
|
+
fi;
|
|
44
|
+
Append(o[i], [max + 1 .. max + deg - old_deg]);
|
|
45
|
+
HTAdd(ht, o[i], i);
|
|
46
|
+
od;
|
|
47
|
+
Unbind(o!.ht);
|
|
48
|
+
o!.ht := ht;
|
|
49
|
+
|
|
50
|
+
# change the action of <o> to that of <t>
|
|
51
|
+
o!.op := RhoAct(t);
|
|
52
|
+
fi;
|
|
53
|
+
return o;
|
|
54
|
+
end;
|
|
55
|
+
|
|
56
|
+
## Methods for some standard things for acting semigroups.
|
|
57
|
+
|
|
58
|
+
InstallMethod(ClosureSemigroupOrMonoidNC,
|
|
59
|
+
"for a function, acting semigroup, finite list of mult. elts, and record",
|
|
60
|
+
[IsFunction,
|
|
61
|
+
IsActingSemigroup,
|
|
62
|
+
IsMultiplicativeElementCollection and IsList and IsFinite,
|
|
63
|
+
IsRecord],
|
|
64
|
+
function(Constructor, S, coll, opts)
|
|
65
|
+
local t, old_o, o, rho_o, old_deg, scc, old_scc, lookup, old_lookup, rho_ht,
|
|
66
|
+
new_data, old_data, max_rank, ht, new_orb, old_orb, new_nr, old_nr, graph,
|
|
67
|
+
old_graph, reps, lambdarhoht, rholookup, repslookup, orblookup1, orblookup2,
|
|
68
|
+
repslens, lenreps, new_schreierpos, old_schreierpos, new_schreiergen,
|
|
69
|
+
old_schreiergen, new_schreiermult, old_schreiermult, gens, nr_new_gens,
|
|
70
|
+
nr_old_gens, lambdaperm, rho, old_to_new, htadd, htvalue, i, x, pos, m, rank,
|
|
71
|
+
rhox, l, ind, pt, schutz, data_val, old, n, j;
|
|
72
|
+
|
|
73
|
+
# opts must be copied and processed before calling this function
|
|
74
|
+
# coll must be copied before calling this function
|
|
75
|
+
|
|
76
|
+
# TODO(later) split this into two methods, one for collections and the other
|
|
77
|
+
# for single elements
|
|
78
|
+
if Size(coll) > 1 then
|
|
79
|
+
coll := Shuffle(Set(coll));
|
|
80
|
+
n := ActionDegree(coll);
|
|
81
|
+
Sort(coll, {x, y} -> ActionRank(x, n) > ActionRank(y, n));
|
|
82
|
+
for x in coll do
|
|
83
|
+
S := ClosureSemigroupOrMonoidNC(Constructor, S, [x], opts);
|
|
84
|
+
od;
|
|
85
|
+
return S;
|
|
86
|
+
elif coll[1] in S then
|
|
87
|
+
return S;
|
|
88
|
+
fi;
|
|
89
|
+
# Size(coll) = 1 . . .
|
|
90
|
+
|
|
91
|
+
# init the semigroup or monoid
|
|
92
|
+
t := Constructor(S, coll, opts);
|
|
93
|
+
|
|
94
|
+
# if nothing is known about s, then return t
|
|
95
|
+
if not HasLambdaOrb(S) or IsSemigroupIdeal(S) then
|
|
96
|
+
return t;
|
|
97
|
+
fi;
|
|
98
|
+
|
|
99
|
+
# set up lambda orb for t
|
|
100
|
+
old_o := LambdaOrb(S);
|
|
101
|
+
o := StructuralCopy(old_o);
|
|
102
|
+
rho_o := StructuralCopy(RhoOrb(S));
|
|
103
|
+
|
|
104
|
+
if IsTransformationSemigroup(S) then
|
|
105
|
+
old_deg := DegreeOfTransformationSemigroup(S);
|
|
106
|
+
if old_deg < DegreeOfTransformationSemigroup(t) then
|
|
107
|
+
SEMIGROUPS.ChangeDegreeOfTransformationSemigroup(o, old_deg, t);
|
|
108
|
+
SEMIGROUPS.ChangeDegreeOfTransformationSemigroup(rho_o, old_deg, t);
|
|
109
|
+
fi;
|
|
110
|
+
fi;
|
|
111
|
+
|
|
112
|
+
coll[1] := ConvertToInternalElement(S, coll[1]);
|
|
113
|
+
|
|
114
|
+
AddGeneratorsToOrbit(o, coll);
|
|
115
|
+
|
|
116
|
+
# unbind everything related to strongly connected components, since
|
|
117
|
+
# even if the orbit length doesn't change the strongly connected components
|
|
118
|
+
# might
|
|
119
|
+
Unbind(o!.scc);
|
|
120
|
+
Unbind(o!.trees);
|
|
121
|
+
Unbind(o!.scc_lookup);
|
|
122
|
+
Unbind(o!.mults);
|
|
123
|
+
Unbind(o!.schutz);
|
|
124
|
+
Unbind(o!.reverse);
|
|
125
|
+
Unbind(o!.rev);
|
|
126
|
+
Unbind(o!.schutzstab);
|
|
127
|
+
Unbind(o!.factorgroups);
|
|
128
|
+
Unbind(o!.factors);
|
|
129
|
+
|
|
130
|
+
o!.parent := t;
|
|
131
|
+
o!.scc_reps := [FakeOne(GeneratorsOfSemigroup(t))];
|
|
132
|
+
|
|
133
|
+
SetLambdaOrb(t, o);
|
|
134
|
+
|
|
135
|
+
if not HasSemigroupData(S) or SemigroupData(S)!.pos = 0 then
|
|
136
|
+
return t;
|
|
137
|
+
fi;
|
|
138
|
+
|
|
139
|
+
scc := OrbSCC(o);
|
|
140
|
+
old_scc := OrbSCC(old_o);
|
|
141
|
+
lookup := o!.scc_lookup;
|
|
142
|
+
|
|
143
|
+
old_lookup := old_o!.scc_lookup;
|
|
144
|
+
|
|
145
|
+
# we don't do AddGeneratorsToOrbit of rho_o here because this is handled by
|
|
146
|
+
# Enumerate(SemigroupData.. later
|
|
147
|
+
rho_ht := rho_o!.ht;
|
|
148
|
+
|
|
149
|
+
# unbind everything related to strongly connected components, since
|
|
150
|
+
# even if the orbit length doesn't change the strongly connected components
|
|
151
|
+
# might
|
|
152
|
+
Unbind(rho_o!.scc);
|
|
153
|
+
Unbind(rho_o!.trees);
|
|
154
|
+
Unbind(rho_o!.scc_lookup);
|
|
155
|
+
Unbind(rho_o!.mults);
|
|
156
|
+
Unbind(rho_o!.schutz);
|
|
157
|
+
Unbind(rho_o!.reverse);
|
|
158
|
+
Unbind(rho_o!.rev);
|
|
159
|
+
Unbind(rho_o!.schutzstab);
|
|
160
|
+
|
|
161
|
+
rho_o!.parent := t;
|
|
162
|
+
rho_o!.scc_reps := [FakeOne(GeneratorsOfSemigroup(t))];
|
|
163
|
+
Append(rho_o!.gens, coll);
|
|
164
|
+
ResetFilterObj(rho_o, IsClosedOrbit);
|
|
165
|
+
SetRhoOrb(t, rho_o);
|
|
166
|
+
|
|
167
|
+
# get new and old R-rep orbit data
|
|
168
|
+
new_data := SemigroupData(t);
|
|
169
|
+
old_data := SemigroupData(S);
|
|
170
|
+
max_rank := MaximumList(List(coll, x -> ActionRank(t)(x)));
|
|
171
|
+
|
|
172
|
+
Assert(1, rho_o!.gens = new_data!.gens);
|
|
173
|
+
Assert(1, o!.gens = new_data!.gens);
|
|
174
|
+
|
|
175
|
+
ht := new_data!.ht;
|
|
176
|
+
# so far found R-reps
|
|
177
|
+
|
|
178
|
+
new_orb := new_data!.orbit;
|
|
179
|
+
old_orb := old_data!.orbit;
|
|
180
|
+
# the so far found R-reps data
|
|
181
|
+
|
|
182
|
+
new_nr := Length(new_orb);
|
|
183
|
+
old_nr := Length(old_orb);
|
|
184
|
+
# points in orb in position at most i have descendants
|
|
185
|
+
|
|
186
|
+
graph := new_data!.graph;
|
|
187
|
+
old_graph := old_data!.graph;
|
|
188
|
+
graph[1] := ShallowCopy(old_graph[1]);
|
|
189
|
+
# orbit graph of orbit of R-classes under left mult
|
|
190
|
+
|
|
191
|
+
reps := new_data!.reps;
|
|
192
|
+
# reps grouped by equal lambda and rho value
|
|
193
|
+
# HTValue(lambdarhoht, Concatenation(lambda(x), rho(x)))
|
|
194
|
+
|
|
195
|
+
lambdarhoht := new_data!.lambdarhoht;
|
|
196
|
+
rholookup := new_data!.rholookup;
|
|
197
|
+
|
|
198
|
+
repslookup := new_data!.repslookup;
|
|
199
|
+
# Position(orb, reps[i][j])=repslookup[i][j] = HTValue(ht, reps[i][j])
|
|
200
|
+
|
|
201
|
+
orblookup1 := new_data!.orblookup1;
|
|
202
|
+
# orblookup1[i] position in reps containing orb[i][4] (the R-rep)
|
|
203
|
+
|
|
204
|
+
orblookup2 := new_data!.orblookup2;
|
|
205
|
+
# orblookup2[i] position in reps[orblookup1[i]]
|
|
206
|
+
# containing orb[i][4] (the R-rep)
|
|
207
|
+
|
|
208
|
+
repslens := new_data!.repslens;
|
|
209
|
+
# Length(reps[i])=repslens[i]
|
|
210
|
+
|
|
211
|
+
lenreps := new_data!.lenreps;
|
|
212
|
+
# lenreps=Length(reps)
|
|
213
|
+
|
|
214
|
+
# schreier
|
|
215
|
+
new_schreierpos := new_data!.schreierpos;
|
|
216
|
+
old_schreierpos := old_data!.schreierpos;
|
|
217
|
+
new_schreiergen := new_data!.schreiergen;
|
|
218
|
+
old_schreiergen := old_data!.schreiergen;
|
|
219
|
+
new_schreiermult := new_data!.schreiermult;
|
|
220
|
+
old_schreiermult := old_data!.schreiermult;
|
|
221
|
+
|
|
222
|
+
# generators
|
|
223
|
+
gens := new_data!.gens;
|
|
224
|
+
nr_new_gens := Length(gens);
|
|
225
|
+
nr_old_gens := Length(old_data!.gens);
|
|
226
|
+
|
|
227
|
+
# lambda/rho
|
|
228
|
+
lambdaperm := LambdaPerm(t);
|
|
229
|
+
rho := RhoFunc(t);
|
|
230
|
+
|
|
231
|
+
# look up for old_to_new[i]:=Position(new_orb, old_orb[i]);
|
|
232
|
+
# i.e. position of old R-rep in new_orb
|
|
233
|
+
# TODO(later): this is mainly used to update the orbit graph of the R-rep
|
|
234
|
+
# orbit, but I think this could also be done during the main loop below.
|
|
235
|
+
|
|
236
|
+
old_to_new := EmptyPlist(old_nr);
|
|
237
|
+
old_to_new[1] := 1;
|
|
238
|
+
|
|
239
|
+
# initialise <reps>, <repslookup>, <repslens>, <lenreps>...
|
|
240
|
+
for i in [2 .. Length(scc)] do
|
|
241
|
+
reps[i] := [];
|
|
242
|
+
repslookup[i] := [];
|
|
243
|
+
repslens[i] := [];
|
|
244
|
+
lenreps[i] := 0;
|
|
245
|
+
od;
|
|
246
|
+
|
|
247
|
+
if IsBoundGlobal("ORBC") then
|
|
248
|
+
htadd := HTAdd_TreeHash_C;
|
|
249
|
+
htvalue := HTValue_TreeHash_C;
|
|
250
|
+
else
|
|
251
|
+
htadd := HTAdd;
|
|
252
|
+
htvalue := HTValue;
|
|
253
|
+
fi;
|
|
254
|
+
|
|
255
|
+
i := 1;
|
|
256
|
+
|
|
257
|
+
# install old R-class reps in new_orb
|
|
258
|
+
while new_nr <= old_nr and i < old_nr do
|
|
259
|
+
i := i + 1;
|
|
260
|
+
|
|
261
|
+
x := old_orb[i][4];
|
|
262
|
+
|
|
263
|
+
pos := old_schreiermult[i]; # lambda - index for x
|
|
264
|
+
m := lookup[pos];
|
|
265
|
+
rank := ActionRank(t)(x);
|
|
266
|
+
|
|
267
|
+
if rank > max_rank or scc[m][1] = old_scc[old_lookup[pos]][1] then
|
|
268
|
+
# in either case x is an old R-rep and so has rectified lambda value.
|
|
269
|
+
elif pos = old_scc[old_lookup[pos]][1] then
|
|
270
|
+
x := x * LambdaOrbMult(o, m, pos)[2];
|
|
271
|
+
else
|
|
272
|
+
# x has rectified lambda value but pos refers to the unrectified value
|
|
273
|
+
x := x * LambdaOrbMult(old_o, old_lookup[pos], pos)[1]
|
|
274
|
+
* LambdaOrbMult(o, m, pos)[2];
|
|
275
|
+
fi;
|
|
276
|
+
|
|
277
|
+
rhox := rho(x);
|
|
278
|
+
l := htvalue(rho_ht, rhox);
|
|
279
|
+
# l <> fail since we have copied the old rho values
|
|
280
|
+
|
|
281
|
+
if not IsBound(lambdarhoht[l]) then
|
|
282
|
+
# old rho-value, but new lambda-rho-combination
|
|
283
|
+
|
|
284
|
+
new_nr := new_nr + 1;
|
|
285
|
+
lenreps[m] := lenreps[m] + 1;
|
|
286
|
+
ind := lenreps[m];
|
|
287
|
+
lambdarhoht[l] := [];
|
|
288
|
+
lambdarhoht[l][m] := ind;
|
|
289
|
+
|
|
290
|
+
reps[m][ind] := [x];
|
|
291
|
+
repslookup[m][ind] := [new_nr];
|
|
292
|
+
repslens[m][ind] := 1;
|
|
293
|
+
|
|
294
|
+
orblookup1[new_nr] := ind;
|
|
295
|
+
orblookup2[new_nr] := 1;
|
|
296
|
+
|
|
297
|
+
pt := [t, m, o, x, false, new_nr];
|
|
298
|
+
elif not IsBound(lambdarhoht[l][m]) then
|
|
299
|
+
# old rho-value, but new lambda-rho-combination
|
|
300
|
+
|
|
301
|
+
new_nr := new_nr + 1;
|
|
302
|
+
lenreps[m] := lenreps[m] + 1;
|
|
303
|
+
ind := lenreps[m];
|
|
304
|
+
lambdarhoht[l][m] := ind;
|
|
305
|
+
|
|
306
|
+
reps[m][ind] := [x];
|
|
307
|
+
repslookup[m][ind] := [new_nr];
|
|
308
|
+
repslens[m][ind] := 1;
|
|
309
|
+
|
|
310
|
+
orblookup1[new_nr] := ind;
|
|
311
|
+
orblookup2[new_nr] := 1;
|
|
312
|
+
|
|
313
|
+
pt := [t, m, o, x, false, new_nr];
|
|
314
|
+
else
|
|
315
|
+
# old rho value, and maybe we already have a rep of y's R-class...
|
|
316
|
+
ind := lambdarhoht[l][m];
|
|
317
|
+
pt := [t, m, o, x, false, new_nr + 1];
|
|
318
|
+
if not rank > max_rank then
|
|
319
|
+
# this is maybe a new R-reps and so tests are required...
|
|
320
|
+
|
|
321
|
+
# check membership in Schutzenberger group via stabiliser chain
|
|
322
|
+
schutz := LambdaOrbStabChain(o, m);
|
|
323
|
+
|
|
324
|
+
if schutz = true then
|
|
325
|
+
# the Schutzenberger group is the symmetric group
|
|
326
|
+
old_to_new[i] := repslookup[m][ind][1];
|
|
327
|
+
continue;
|
|
328
|
+
else
|
|
329
|
+
if schutz = false then
|
|
330
|
+
# the Schutzenberger group is trivial
|
|
331
|
+
data_val := htvalue(ht, x);
|
|
332
|
+
if data_val <> fail then
|
|
333
|
+
old_to_new[i] := data_val;
|
|
334
|
+
continue;
|
|
335
|
+
fi;
|
|
336
|
+
else
|
|
337
|
+
# the Schutzenberger group is neither trivial nor symmetric group
|
|
338
|
+
old := false;
|
|
339
|
+
for n in [1 .. repslens[m][ind]] do
|
|
340
|
+
if SchutzGpMembership(S)(schutz, lambdaperm(reps[m][ind][n], x))
|
|
341
|
+
then
|
|
342
|
+
old := true;
|
|
343
|
+
old_to_new[i] := repslookup[m][ind][n];
|
|
344
|
+
break;
|
|
345
|
+
fi;
|
|
346
|
+
od;
|
|
347
|
+
if old then
|
|
348
|
+
continue;
|
|
349
|
+
fi;
|
|
350
|
+
fi;
|
|
351
|
+
fi;
|
|
352
|
+
fi;
|
|
353
|
+
# if rank>max_rank, then <y> is an old R-rep and hence a new one too
|
|
354
|
+
new_nr := new_nr + 1;
|
|
355
|
+
repslens[m][ind] := repslens[m][ind] + 1;
|
|
356
|
+
reps[m][ind][repslens[m][ind]] := x;
|
|
357
|
+
repslookup[m][ind][repslens[m][ind]] := new_nr;
|
|
358
|
+
orblookup1[new_nr] := ind;
|
|
359
|
+
orblookup2[new_nr] := repslens[m][ind];
|
|
360
|
+
fi;
|
|
361
|
+
rholookup[new_nr] := l;
|
|
362
|
+
new_orb[new_nr] := pt;
|
|
363
|
+
graph[new_nr] := ShallowCopy(old_graph[i]);
|
|
364
|
+
new_schreierpos[new_nr] := old_to_new[old_schreierpos[i]];
|
|
365
|
+
# orb[nr] is obtained from orb[i]
|
|
366
|
+
new_schreiergen[new_nr] := old_schreiergen[i];
|
|
367
|
+
# by multiplying by gens[j]
|
|
368
|
+
new_schreiermult[new_nr] := pos; # and ends up in position <pos> of
|
|
369
|
+
# its lambda orb
|
|
370
|
+
htadd(ht, x, new_nr);
|
|
371
|
+
old_to_new[i] := new_nr;
|
|
372
|
+
od;
|
|
373
|
+
|
|
374
|
+
# process the orbit graph
|
|
375
|
+
for i in [1 .. new_nr] do
|
|
376
|
+
for j in [1 .. Length(graph[i])] do
|
|
377
|
+
graph[i][j] := old_to_new[graph[i][j]];
|
|
378
|
+
od;
|
|
379
|
+
od;
|
|
380
|
+
|
|
381
|
+
# apply new generators to old R-reps
|
|
382
|
+
new_data!.genstoapply := [nr_old_gens + 1 .. nr_new_gens];
|
|
383
|
+
new_data!.pos := 0;
|
|
384
|
+
new_data!.stopper := old_to_new[old_data!.pos];
|
|
385
|
+
new_data!.init := true;
|
|
386
|
+
Enumerate(new_data, infinity, ReturnFalse);
|
|
387
|
+
|
|
388
|
+
new_data!.pos := old_to_new[old_data!.pos];
|
|
389
|
+
new_data!.stopper := false;
|
|
390
|
+
new_data!.genstoapply := [1 .. nr_new_gens];
|
|
391
|
+
|
|
392
|
+
return t;
|
|
393
|
+
end);
|
|
394
|
+
|
|
395
|
+
InstallMethod(ClosureInverseSemigroupOrMonoidNC,
|
|
396
|
+
"for a function, inverse acting semigroup, finite list of mult. elts, and rec",
|
|
397
|
+
[IsFunction,
|
|
398
|
+
IsInverseActingSemigroupRep,
|
|
399
|
+
IsMultiplicativeElementCollection and IsList and IsFinite,
|
|
400
|
+
IsRecord],
|
|
401
|
+
function(Constructor, S, coll, opts)
|
|
402
|
+
local gens, T, o, n, x;
|
|
403
|
+
|
|
404
|
+
# opts must be copied and processed before calling this function
|
|
405
|
+
# coll must be copied before calling this function
|
|
406
|
+
|
|
407
|
+
if IsSemigroupIdeal(S) then
|
|
408
|
+
TryNextMethod();
|
|
409
|
+
fi;
|
|
410
|
+
|
|
411
|
+
# TODO(later) split this into two methods
|
|
412
|
+
if Size(coll) > 1 then
|
|
413
|
+
coll := Shuffle(Set(coll));
|
|
414
|
+
n := ActionDegree(coll);
|
|
415
|
+
Sort(coll, {x, y} -> ActionRank(x, n) > ActionRank(y, n));
|
|
416
|
+
|
|
417
|
+
for x in coll do
|
|
418
|
+
S := ClosureInverseSemigroupOrMonoidNC(Constructor, S, [x], opts);
|
|
419
|
+
od;
|
|
420
|
+
return S;
|
|
421
|
+
elif coll[1] in S then
|
|
422
|
+
return S;
|
|
423
|
+
fi;
|
|
424
|
+
|
|
425
|
+
gens := GeneratorsOfInverseSemigroup(S);
|
|
426
|
+
T := Constructor(Concatenation(gens, coll), opts);
|
|
427
|
+
|
|
428
|
+
if not IsIdempotent(coll[1]) then
|
|
429
|
+
Add(coll, coll[1] ^ -1);
|
|
430
|
+
fi;
|
|
431
|
+
|
|
432
|
+
if Constructor = InverseMonoid and One(T) <> One(S) then
|
|
433
|
+
Add(coll, One(T));
|
|
434
|
+
fi;
|
|
435
|
+
|
|
436
|
+
o := StructuralCopy(LambdaOrb(S));
|
|
437
|
+
coll[1] := ConvertToInternalElement(S, coll[1]);
|
|
438
|
+
AddGeneratorsToOrbit(o, coll);
|
|
439
|
+
|
|
440
|
+
# Remove everything related to strongly connected components
|
|
441
|
+
Unbind(o!.scc);
|
|
442
|
+
Unbind(o!.trees);
|
|
443
|
+
Unbind(o!.scc_lookup);
|
|
444
|
+
Unbind(o!.mults);
|
|
445
|
+
Unbind(o!.schutz);
|
|
446
|
+
Unbind(o!.reverse);
|
|
447
|
+
Unbind(o!.rev);
|
|
448
|
+
Unbind(o!.schutzstab);
|
|
449
|
+
Unbind(o!.factorgroups);
|
|
450
|
+
Unbind(o!.factors);
|
|
451
|
+
|
|
452
|
+
o!.parent := T;
|
|
453
|
+
o!.scc_reps := [FakeOne(o!.gens)];
|
|
454
|
+
|
|
455
|
+
SetLambdaOrb(T, o);
|
|
456
|
+
return T;
|
|
457
|
+
end);
|
|
458
|
+
|
|
459
|
+
# different method for inverse/regular, same for ideals
|
|
460
|
+
|
|
461
|
+
InstallMethodWithRandomSource(Random,
|
|
462
|
+
"for a random source and an acting semigroup",
|
|
463
|
+
[IsRandomSource, IsActingSemigroup],
|
|
464
|
+
function(rs, s)
|
|
465
|
+
local data, gens, i, w, x, n, m, o, rep, g;
|
|
466
|
+
|
|
467
|
+
data := SemigroupData(s);
|
|
468
|
+
|
|
469
|
+
if not IsClosedData(data) then
|
|
470
|
+
if HasGeneratorsOfSemigroup(s) then
|
|
471
|
+
gens := GeneratorsOfSemigroup(s);
|
|
472
|
+
i := Random(rs, 1, 2 * Length(gens));
|
|
473
|
+
w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
|
|
474
|
+
return EvaluateWord(gens, w);
|
|
475
|
+
elif IsSemigroupIdeal(s) and HasGeneratorsOfSemigroupIdeal(s) then
|
|
476
|
+
# This clause is currently unreachable
|
|
477
|
+
x := Random(rs, 1, Length(GeneratorsOfSemigroupIdeal(s)));
|
|
478
|
+
gens := GeneratorsOfSemigroup(SupersemigroupOfIdeal(s));
|
|
479
|
+
|
|
480
|
+
i := Random(rs, 1, Length(gens));
|
|
481
|
+
w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
|
|
482
|
+
|
|
483
|
+
x := x * EvaluateWord(gens, w);
|
|
484
|
+
|
|
485
|
+
i := Random(rs, 1, Length(gens));
|
|
486
|
+
w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
|
|
487
|
+
return EvaluateWord(gens, w) * x;
|
|
488
|
+
fi;
|
|
489
|
+
fi;
|
|
490
|
+
|
|
491
|
+
n := Random(rs, 2, Length(data!.orbit));
|
|
492
|
+
m := data[n][2];
|
|
493
|
+
o := data[n][3];
|
|
494
|
+
rep := data[n][4];
|
|
495
|
+
|
|
496
|
+
g := Random(rs, LambdaOrbSchutzGp(o, m));
|
|
497
|
+
i := Random(rs, OrbSCC(o)[m]);
|
|
498
|
+
return ConvertToExternalElement(s,
|
|
499
|
+
StabilizerAction(s)(rep, g)
|
|
500
|
+
* LambdaOrbMult(o, m, i)[1]);
|
|
501
|
+
end);
|
|
502
|
+
|
|
503
|
+
# different method for inverse, same method for ideals
|
|
504
|
+
|
|
505
|
+
InstallMethodWithRandomSource(Random,
|
|
506
|
+
"for a random source and a regular acting semigroup rep",
|
|
507
|
+
[IsRandomSource, IsRegularActingSemigroupRep],
|
|
508
|
+
function(rs, S)
|
|
509
|
+
local gens, i, w, x, o, m;
|
|
510
|
+
|
|
511
|
+
if not IsClosedOrbit(LambdaOrb(S)) or not IsClosedOrbit(RhoOrb(S)) then
|
|
512
|
+
if HasGeneratorsOfSemigroup(S) then
|
|
513
|
+
gens := GeneratorsOfSemigroup(S);
|
|
514
|
+
i := Random(rs, 1, 2 * Int(Length(gens)));
|
|
515
|
+
w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
|
|
516
|
+
return EvaluateWord(gens, w);
|
|
517
|
+
else
|
|
518
|
+
x := Random(rs, GeneratorsOfSemigroupIdeal(S));
|
|
519
|
+
gens := GeneratorsOfSemigroup(SupersemigroupOfIdeal(S));
|
|
520
|
+
|
|
521
|
+
i := Random(rs, 1, Length(gens));
|
|
522
|
+
w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
|
|
523
|
+
|
|
524
|
+
x := x * EvaluateWord(gens, w);
|
|
525
|
+
|
|
526
|
+
i := Random(rs, 1, Length(gens));
|
|
527
|
+
w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
|
|
528
|
+
return EvaluateWord(gens, w) * x;
|
|
529
|
+
fi;
|
|
530
|
+
fi;
|
|
531
|
+
|
|
532
|
+
o := LambdaOrb(S);
|
|
533
|
+
i := Random(rs, 2, Length(o));
|
|
534
|
+
m := OrbSCCLookup(o)[i];
|
|
535
|
+
x := LambdaOrbRep(o, m)
|
|
536
|
+
* Random(rs, LambdaOrbSchutzGp(o, m))
|
|
537
|
+
* LambdaOrbMult(o, m, i)[1];
|
|
538
|
+
|
|
539
|
+
o := RhoOrb(S);
|
|
540
|
+
m := OrbSCCLookup(o)[Position(o, RhoFunc(S)(x))];
|
|
541
|
+
i := Random(rs, OrbSCC(o)[m]);
|
|
542
|
+
|
|
543
|
+
return ConvertToExternalElement(S, RhoOrbMult(o, m, i)[1] * x);
|
|
544
|
+
end);
|
|
545
|
+
|
|
546
|
+
# same method for inverse ideals
|
|
547
|
+
|
|
548
|
+
InstallMethodWithRandomSource(Random,
|
|
549
|
+
"for a random source and and an acting inverse semigroup rep and generators",
|
|
550
|
+
[IsRandomSource, IsInverseActingSemigroupRep],
|
|
551
|
+
function(rs, S)
|
|
552
|
+
local gens, i, w, x, o, m;
|
|
553
|
+
|
|
554
|
+
if not IsClosedOrbit(LambdaOrb(S)) then
|
|
555
|
+
if HasGeneratorsOfSemigroup(S) then
|
|
556
|
+
gens := GeneratorsOfSemigroup(S);
|
|
557
|
+
i := Random(rs, 1, 2 * Int(Length(gens)));
|
|
558
|
+
w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
|
|
559
|
+
return EvaluateWord(gens, w);
|
|
560
|
+
else
|
|
561
|
+
x := Random(rs, GeneratorsOfSemigroupIdeal(S));
|
|
562
|
+
gens := GeneratorsOfSemigroup(SupersemigroupOfIdeal(S));
|
|
563
|
+
|
|
564
|
+
i := Random(rs, 1, Length(gens) / 2);
|
|
565
|
+
w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
|
|
566
|
+
|
|
567
|
+
x := x * EvaluateWord(gens, w);
|
|
568
|
+
|
|
569
|
+
i := Random(rs, 1, Length(gens) / 2);
|
|
570
|
+
w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
|
|
571
|
+
return EvaluateWord(gens, w) * x;
|
|
572
|
+
fi;
|
|
573
|
+
fi;
|
|
574
|
+
|
|
575
|
+
o := LambdaOrb(S);
|
|
576
|
+
i := Random(rs, 2, Length(o));
|
|
577
|
+
m := OrbSCCLookup(o)[i];
|
|
578
|
+
x := LambdaOrbRep(o, m)
|
|
579
|
+
* Random(rs, LambdaOrbSchutzGp(o, m))
|
|
580
|
+
* LambdaOrbMult(o, m, i)[1];
|
|
581
|
+
|
|
582
|
+
i := Random(rs, OrbSCC(o)[m]);
|
|
583
|
+
|
|
584
|
+
return ConvertToExternalElement(S, LambdaOrbMult(o, m, i)[2] * x);
|
|
585
|
+
end);
|
|
586
|
+
|
|
587
|
+
#############################################################################
|
|
588
|
+
|
|
589
|
+
# different method for inverse, same method for ideals
|
|
590
|
+
|
|
591
|
+
InstallMethod(\in,
|
|
592
|
+
"for a multiplicative element and regular acting semigroup rep",
|
|
593
|
+
[IsMultiplicativeElement, IsRegularActingSemigroupRep],
|
|
594
|
+
function(x, S)
|
|
595
|
+
local pos_lambda, pos_rho, m, schutz, n, rep;
|
|
596
|
+
|
|
597
|
+
if ElementsFamily(FamilyObj(S)) <> FamilyObj(x)
|
|
598
|
+
or (IsActingSemigroupWithFixedDegreeMultiplication(S)
|
|
599
|
+
and ActionDegree(x) <> ActionDegree(S))
|
|
600
|
+
or ActionDegree(x) > ActionDegree(S) then
|
|
601
|
+
return false;
|
|
602
|
+
elif Position(S, x) <> fail then # check if x is already known to be in S
|
|
603
|
+
return true;
|
|
604
|
+
elif IsEnumerated(S) then
|
|
605
|
+
return false;
|
|
606
|
+
elif HasAsSSortedList(S) then
|
|
607
|
+
# This is currently unreachable
|
|
608
|
+
return x in AsSSortedList(S);
|
|
609
|
+
elif not (IsMonoid(S) and IsOne(x)) then
|
|
610
|
+
if Length(Generators(S)) > 0
|
|
611
|
+
and ActionRank(S)(x) >
|
|
612
|
+
MaximumList(List(Generators(S), y -> ActionRank(S)(y))) then
|
|
613
|
+
Info(InfoSemigroups, 2, "element has larger rank than any element of ",
|
|
614
|
+
"semigroup");
|
|
615
|
+
return false;
|
|
616
|
+
fi;
|
|
617
|
+
fi;
|
|
618
|
+
|
|
619
|
+
if HasMinimalIdeal(S) then
|
|
620
|
+
if ActionRank(S)(x) < ActionRank(S)(Representative(MinimalIdeal(S))) then
|
|
621
|
+
Info(InfoSemigroups, 2, "element has smaller rank than any element of ",
|
|
622
|
+
"semigroup.");
|
|
623
|
+
return false;
|
|
624
|
+
fi;
|
|
625
|
+
fi;
|
|
626
|
+
|
|
627
|
+
x := ConvertToInternalElement(S, x);
|
|
628
|
+
pos_lambda := Position(Enumerate(LambdaOrb(S)), LambdaFunc(S)(x));
|
|
629
|
+
|
|
630
|
+
if pos_lambda = fail then
|
|
631
|
+
return false;
|
|
632
|
+
fi;
|
|
633
|
+
|
|
634
|
+
pos_rho := EnumeratePosition(RhoOrb(S), RhoFunc(S)(x), false);
|
|
635
|
+
# this is worth it in the case that schutz=true below! For example, in the
|
|
636
|
+
# full transformation monoid on 12 points (see Issue 22 in testinstall.tst)
|
|
637
|
+
|
|
638
|
+
if pos_rho = fail then
|
|
639
|
+
return false;
|
|
640
|
+
fi;
|
|
641
|
+
|
|
642
|
+
m := OrbSCCLookup(LambdaOrb(S))[pos_lambda];
|
|
643
|
+
schutz := LambdaOrbStabChain(LambdaOrb(S), m);
|
|
644
|
+
|
|
645
|
+
if schutz = true then
|
|
646
|
+
return true;
|
|
647
|
+
elif pos_lambda <> OrbSCC(LambdaOrb(S))[m][1] then
|
|
648
|
+
x := x * LambdaOrbMult(LambdaOrb(S), m, pos_lambda)[2];
|
|
649
|
+
fi;
|
|
650
|
+
|
|
651
|
+
n := OrbSCCLookup(Enumerate(RhoOrb(S)))[pos_rho];
|
|
652
|
+
|
|
653
|
+
if pos_rho <> OrbSCC(RhoOrb(S))[n][1] then
|
|
654
|
+
x := RhoOrbMult(RhoOrb(S), n, pos_rho)[2] * x;
|
|
655
|
+
fi;
|
|
656
|
+
|
|
657
|
+
if IsIdempotent(x) then
|
|
658
|
+
return true;
|
|
659
|
+
fi;
|
|
660
|
+
|
|
661
|
+
rep := LambdaOrbRep(LambdaOrb(S), m);
|
|
662
|
+
pos_rho := Position(RhoOrb(S), RhoFunc(S)(rep));
|
|
663
|
+
|
|
664
|
+
if OrbSCCLookup(RhoOrb(S))[pos_rho] <> n then
|
|
665
|
+
# Cannot currently find an example that enters here.
|
|
666
|
+
return false;
|
|
667
|
+
elif pos_rho <> OrbSCC(RhoOrb(S))[n][1] then
|
|
668
|
+
rep := RhoOrbMult(RhoOrb(S), n, pos_rho)[2] * rep;
|
|
669
|
+
fi;
|
|
670
|
+
|
|
671
|
+
if rep = x then
|
|
672
|
+
return true;
|
|
673
|
+
elif schutz = false then
|
|
674
|
+
return false;
|
|
675
|
+
fi;
|
|
676
|
+
|
|
677
|
+
return SchutzGpMembership(S)(schutz, LambdaPerm(S)(rep, x));
|
|
678
|
+
end);
|
|
679
|
+
|
|
680
|
+
# same method for inverse ideals
|
|
681
|
+
# TODO(later) clean this up
|
|
682
|
+
|
|
683
|
+
InstallMethod(\in,
|
|
684
|
+
"for a multiplicative element and inverse acting semigroup rep",
|
|
685
|
+
[IsMultiplicativeElement, IsInverseActingSemigroupRep],
|
|
686
|
+
function(x, S)
|
|
687
|
+
local o, lambda, lambda_l, rho, rho_l, m, schutz, scc, rep;
|
|
688
|
+
|
|
689
|
+
if ElementsFamily(FamilyObj(S)) <> FamilyObj(x)
|
|
690
|
+
or (IsActingSemigroupWithFixedDegreeMultiplication(S)
|
|
691
|
+
and ActionDegree(x) <> ActionDegree(S))
|
|
692
|
+
or ActionDegree(x) > ActionDegree(S) then
|
|
693
|
+
return false;
|
|
694
|
+
elif HasFroidurePin(S) and Position(S, x) <> fail then
|
|
695
|
+
# check if x is already known to be in S
|
|
696
|
+
return true;
|
|
697
|
+
elif HasFroidurePin(S) and IsEnumerated(S) then
|
|
698
|
+
return false;
|
|
699
|
+
elif HasAsSSortedList(S) then
|
|
700
|
+
return x in AsSSortedList(S);
|
|
701
|
+
elif not (IsMonoid(S) and IsOne(x)) then
|
|
702
|
+
if Length(Generators(S)) > 0
|
|
703
|
+
and ActionRank(S)(x) >
|
|
704
|
+
MaximumList(List(Generators(S), x -> ActionRank(S)(x))) then
|
|
705
|
+
Info(InfoSemigroups, 2, "element has larger rank than any element of ",
|
|
706
|
+
"semigroup.");
|
|
707
|
+
return false;
|
|
708
|
+
fi;
|
|
709
|
+
fi;
|
|
710
|
+
|
|
711
|
+
if HasMinimalIdeal(S) then
|
|
712
|
+
if ActionRank(S)(x) < ActionRank(S)(Representative(MinimalIdeal(S))) then
|
|
713
|
+
Info(InfoSemigroups, 2, "element has smaller rank than any element of ",
|
|
714
|
+
"semigroup.");
|
|
715
|
+
return false;
|
|
716
|
+
fi;
|
|
717
|
+
fi;
|
|
718
|
+
|
|
719
|
+
x := ConvertToInternalElement(S, x);
|
|
720
|
+
|
|
721
|
+
o := LambdaOrb(S);
|
|
722
|
+
Enumerate(o);
|
|
723
|
+
lambda := LambdaFunc(S)(x);
|
|
724
|
+
lambda_l := Position(o, lambda);
|
|
725
|
+
|
|
726
|
+
if lambda_l = fail then
|
|
727
|
+
return false;
|
|
728
|
+
fi;
|
|
729
|
+
|
|
730
|
+
rho := RhoFunc(S)(x);
|
|
731
|
+
rho_l := Position(o, rho);
|
|
732
|
+
|
|
733
|
+
if rho_l = fail then
|
|
734
|
+
return false;
|
|
735
|
+
fi;
|
|
736
|
+
|
|
737
|
+
# must use LambdaOrb(S) and not a graded lambda orb as LambdaOrbRep(o, m)
|
|
738
|
+
# when o is graded, is just f and hence \in will always return true!!
|
|
739
|
+
m := OrbSCCLookup(o)[lambda_l];
|
|
740
|
+
|
|
741
|
+
if OrbSCCLookup(o)[rho_l] <> m then
|
|
742
|
+
return false;
|
|
743
|
+
fi;
|
|
744
|
+
|
|
745
|
+
schutz := LambdaOrbStabChain(o, m);
|
|
746
|
+
|
|
747
|
+
if schutz = true then
|
|
748
|
+
return true;
|
|
749
|
+
fi;
|
|
750
|
+
|
|
751
|
+
scc := OrbSCC(o)[m];
|
|
752
|
+
|
|
753
|
+
if lambda_l <> scc[1] then
|
|
754
|
+
x := x * LambdaOrbMult(o, m, lambda_l)[2];
|
|
755
|
+
fi;
|
|
756
|
+
|
|
757
|
+
if rho_l <> scc[1] then
|
|
758
|
+
x := LambdaOrbMult(o, m, rho_l)[1] * x;
|
|
759
|
+
fi;
|
|
760
|
+
|
|
761
|
+
if IsIdempotent(x) then
|
|
762
|
+
return true;
|
|
763
|
+
elif schutz = false then
|
|
764
|
+
return false;
|
|
765
|
+
fi;
|
|
766
|
+
|
|
767
|
+
rep := LambdaOrbRep(LambdaOrb(S), m);
|
|
768
|
+
rho_l := Position(LambdaOrb(S), RhoFunc(S)(rep));
|
|
769
|
+
|
|
770
|
+
if rho_l <> OrbSCC(LambdaOrb(S))[m][1] then
|
|
771
|
+
# the D-class rep corresponding to lambda_o and scc.
|
|
772
|
+
rep := LambdaOrbMult(LambdaOrb(S), m, rho_l)[1] * rep;
|
|
773
|
+
fi;
|
|
774
|
+
return SchutzGpMembership(S)(schutz, LambdaPerm(S)(rep, x));
|
|
775
|
+
end);
|
|
776
|
+
|
|
777
|
+
# different method for inverse semigroups
|
|
778
|
+
|
|
779
|
+
InstallMethod(Size, "for a regular acting semigroup rep",
|
|
780
|
+
[IsRegularActingSemigroupRep],
|
|
781
|
+
function(s)
|
|
782
|
+
local lambda_o, rho_o, nr, lambda_scc, rho_scc, r, rhofunc, lookup,
|
|
783
|
+
rho, m;
|
|
784
|
+
|
|
785
|
+
lambda_o := Enumerate(LambdaOrb(s), infinity);
|
|
786
|
+
rho_o := Enumerate(RhoOrb(s), infinity);
|
|
787
|
+
|
|
788
|
+
nr := 0;
|
|
789
|
+
lambda_scc := OrbSCC(lambda_o);
|
|
790
|
+
rho_scc := OrbSCC(rho_o);
|
|
791
|
+
r := Length(lambda_scc);
|
|
792
|
+
rhofunc := RhoFunc(s);
|
|
793
|
+
lookup := OrbSCCLookup(rho_o);
|
|
794
|
+
|
|
795
|
+
for m in [2 .. r] do
|
|
796
|
+
rho := rhofunc(LambdaOrbRep(lambda_o, m));
|
|
797
|
+
nr := nr + Length(lambda_scc[m]) * Size(LambdaOrbSchutzGp(lambda_o, m)) *
|
|
798
|
+
Length(rho_scc[lookup[Position(rho_o, rho)]]);
|
|
799
|
+
od;
|
|
800
|
+
|
|
801
|
+
return nr;
|
|
802
|
+
end);
|
|
803
|
+
|
|
804
|
+
# same method for inverse ideals
|
|
805
|
+
|
|
806
|
+
InstallMethod(Size, "for an acting inverse semigroup rep",
|
|
807
|
+
[IsInverseActingSemigroupRep], 10,
|
|
808
|
+
function(s)
|
|
809
|
+
local o, scc, r, nr, m;
|
|
810
|
+
|
|
811
|
+
o := LambdaOrb(s);
|
|
812
|
+
Enumerate(o, infinity);
|
|
813
|
+
scc := OrbSCC(o);
|
|
814
|
+
r := Length(scc);
|
|
815
|
+
nr := 0;
|
|
816
|
+
|
|
817
|
+
for m in [2 .. r] do
|
|
818
|
+
nr := nr + Length(scc[m]) ^ 2 * Size(LambdaOrbSchutzGp(o, m));
|
|
819
|
+
od;
|
|
820
|
+
return nr;
|
|
821
|
+
end);
|