passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-macosx_14_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-gap-pkg-semigroups might be problematic. Click here for more details.
- gap/pkg/semigroups/CHANGELOG.md +1699 -0
- gap/pkg/semigroups/CONTRIBUTING.md +91 -0
- gap/pkg/semigroups/GNUmakefile +110 -0
- gap/pkg/semigroups/GNUmakefile.in +110 -0
- gap/pkg/semigroups/GPL +674 -0
- gap/pkg/semigroups/LICENSE +16 -0
- gap/pkg/semigroups/Makefile +26 -0
- gap/pkg/semigroups/Makefile.gappkg +225 -0
- gap/pkg/semigroups/PackageInfo.g +529 -0
- gap/pkg/semigroups/README.md +102 -0
- gap/pkg/semigroups/VERSIONS +112 -0
- gap/pkg/semigroups/aclocal.m4 +375 -0
- gap/pkg/semigroups/autogen.sh +25 -0
- gap/pkg/semigroups/bin/aarch64-apple-darwin23-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1157 -0
- gap/pkg/semigroups/config.status +1132 -0
- gap/pkg/semigroups/config.sub +1960 -0
- gap/pkg/semigroups/configure +9742 -0
- gap/pkg/semigroups/configure.ac +71 -0
- gap/pkg/semigroups/data/doc/greens.pickle +1 -0
- gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
- gap/pkg/semigroups/data/tst/bipart4 +10 -0
- gap/pkg/semigroups/data/tst/pperm10 +1 -0
- gap/pkg/semigroups/data/tst/tables.gz +0 -0
- gap/pkg/semigroups/data/tst/testdata +1 -0
- gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
- gap/pkg/semigroups/data/tst/trans3 +7 -0
- gap/pkg/semigroups/data/tst/trans3-old +7 -0
- gap/pkg/semigroups/environment.yml +7 -0
- gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
- gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
- gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
- gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
- gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
- gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
- gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
- gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
- gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
- gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
- gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
- gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
- gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
- gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
- gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
- gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
- gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
- gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
- gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
- gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
- gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
- gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
- gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
- gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
- gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
- gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
- gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
- gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
- gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
- gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
- gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
- gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
- gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
- gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
- gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
- gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
- gap/pkg/semigroups/gap/elements/elements.gd +11 -0
- gap/pkg/semigroups/gap/elements/elements.gi +121 -0
- gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
- gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
- gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
- gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
- gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
- gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
- gap/pkg/semigroups/gap/elements/star.gd +21 -0
- gap/pkg/semigroups/gap/elements/star.gi +21 -0
- gap/pkg/semigroups/gap/elements/trans.gd +13 -0
- gap/pkg/semigroups/gap/elements/trans.gi +50 -0
- gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
- gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
- gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
- gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
- gap/pkg/semigroups/gap/fp/word.gd +15 -0
- gap/pkg/semigroups/gap/fp/word.gi +67 -0
- gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
- gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
- gap/pkg/semigroups/gap/greens/acting.gd +81 -0
- gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
- gap/pkg/semigroups/gap/greens/generic.gd +117 -0
- gap/pkg/semigroups/gap/greens/generic.gi +630 -0
- gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
- gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
- gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
- gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
- gap/pkg/semigroups/gap/main/acting.gd +36 -0
- gap/pkg/semigroups/gap/main/acting.gi +779 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
- gap/pkg/semigroups/gap/main/graded.gd +26 -0
- gap/pkg/semigroups/gap/main/graded.gi +355 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
- gap/pkg/semigroups/gap/main/orbits.gd +24 -0
- gap/pkg/semigroups/gap/main/orbits.gi +512 -0
- gap/pkg/semigroups/gap/main/semiact.gd +20 -0
- gap/pkg/semigroups/gap/main/semiact.gi +821 -0
- gap/pkg/semigroups/gap/main/setup.gd +61 -0
- gap/pkg/semigroups/gap/main/setup.gi +1094 -0
- gap/pkg/semigroups/gap/obsolete.gd +9 -0
- gap/pkg/semigroups/gap/obsolete.gi +14 -0
- gap/pkg/semigroups/gap/options.g +55 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
- gap/pkg/semigroups/gap/tools/display.gd +24 -0
- gap/pkg/semigroups/gap/tools/display.gi +749 -0
- gap/pkg/semigroups/gap/tools/io.gd +17 -0
- gap/pkg/semigroups/gap/tools/io.gi +543 -0
- gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
- gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
- gap/pkg/semigroups/gap/tools/utils.gd +19 -0
- gap/pkg/semigroups/gap/tools/utils.gi +756 -0
- gap/pkg/semigroups/gapbind14/.ccls +18 -0
- gap/pkg/semigroups/gapbind14/.clang-format +104 -0
- gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
- gap/pkg/semigroups/gapbind14/LICENSE +674 -0
- gap/pkg/semigroups/gapbind14/README.md +76 -0
- gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
- gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
- gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
- gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
- gap/pkg/semigroups/gapbind14/demo/configure +34 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
- gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
- gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
- gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
- gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
- gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
- gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
- gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
- gap/pkg/semigroups/init.g +150 -0
- gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
- gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
- gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
- gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
- gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
- gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
- gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
- gap/pkg/semigroups/m4/find_gap.m4 +94 -0
- gap/pkg/semigroups/makedoc.g +153 -0
- gap/pkg/semigroups/prerequisites.sh +62 -0
- gap/pkg/semigroups/read.g +105 -0
- gap/pkg/semigroups/release.toml +6 -0
- gap/pkg/semigroups/tst/extreme/README +2 -0
- gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
- gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
- gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
- gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
- gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
- gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
- gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
- gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
- gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
- gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
- gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
- gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
- gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
- gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
- gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
- gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
- gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
- gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
- gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
- gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
- gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
- gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
- gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
- gap/pkg/semigroups/tst/standard/README +2 -0
- gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
- gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
- gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
- gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
- gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
- gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
- gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
- gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
- gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
- gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
- gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
- gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
- gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
- gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
- gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
- gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
- gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
- gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
- gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
- gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
- gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
- gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
- gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
- gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
- gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
- gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
- gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
- gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
- gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
- gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
- gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
- gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
- gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
- gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
- gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
- gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
- gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
- gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
- gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
- gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
- gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
- gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
- gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
- gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
- gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
- gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
- gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
- gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
- gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
- gap/pkg/semigroups/tst/standard/options.tst +54 -0
- gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
- gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
- gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
- gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
- gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
- gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
- gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
- gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
- gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
- gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
- gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
- gap/pkg/semigroups/tst/testinstall.tst +1815 -0
- gap/pkg/semigroups/tst/teststandard.g +22 -0
- gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
- gap/pkg/semigroups/tst/workspaces/load.g +11 -0
- gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
- gap/pkg/semigroups/tst/workspaces/save.g +14 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA +93 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +354 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +6 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
- passagemath_gap_pkg_semigroups.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,431 @@
|
|
|
1
|
+
###########################################################################
|
|
2
|
+
##
|
|
3
|
+
## libsemigroups/cong.gi
|
|
4
|
+
## Copyright (C) 2022 James D. Mitchell
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
###########################################################################
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
## This file contains the interface to libsemigroups Congruence objects.
|
|
12
|
+
|
|
13
|
+
###########################################################################
|
|
14
|
+
# Categories + properties + true methods
|
|
15
|
+
###########################################################################
|
|
16
|
+
|
|
17
|
+
# Unless explicitly excluded below, any left, right, or 2-sided congruence
|
|
18
|
+
# satisfies CanUseLibsemigroupsCongruence if its range has generators and
|
|
19
|
+
# CanUseFroidurePin, and the congruence has GeneratingPairs. The main reason to
|
|
20
|
+
# exclude some types of congruences from having CanUseLibsemigroupsCongruence
|
|
21
|
+
# is because there are better methods specifically for that type of congruence,
|
|
22
|
+
# and to avoid inadvertently computing a libsemigroups Congruence object.
|
|
23
|
+
# Note that any congruence with generating pairs whose range/source has
|
|
24
|
+
# CanUseFroidurePin, can use libsemigroups Congruence objects in theory (and
|
|
25
|
+
# they could also in practice), but we exclude this, for the reasons above.
|
|
26
|
+
#
|
|
27
|
+
# The fundamental operation for Congruences that satisfy
|
|
28
|
+
# CanUseLibsemigroupsCongruence is EquivalenceRelationPartition, and any type
|
|
29
|
+
# of congruence not satisfying CanUseLibsemigroupsCongruence should implement
|
|
30
|
+
# EquivalenceRelationPartition, and then the other methods will be available.
|
|
31
|
+
|
|
32
|
+
InstallImmediateMethod(CanUseLibsemigroupsCongruence,
|
|
33
|
+
IsLeftRightOrTwoSidedCongruence
|
|
34
|
+
and HasRange,
|
|
35
|
+
0,
|
|
36
|
+
C -> CanUseFroidurePin(Range(C))
|
|
37
|
+
and HasGeneratorsOfSemigroup(Range(C))
|
|
38
|
+
or (HasIsFreeSemigroup(Range(C))
|
|
39
|
+
and IsFreeSemigroup(Range(C)))
|
|
40
|
+
or (HasIsFreeMonoid(Range(C))
|
|
41
|
+
and IsFreeMonoid(Range(C))));
|
|
42
|
+
|
|
43
|
+
InstallMethod(CanUseLibsemigroupsCongruence,
|
|
44
|
+
"for a left, right, or 2-sided congruence that can compute partition",
|
|
45
|
+
[CanComputeEquivalenceRelationPartition],
|
|
46
|
+
ReturnFalse);
|
|
47
|
+
|
|
48
|
+
# TODO(later) remove CanUseLibsemigroupsCongruences?
|
|
49
|
+
|
|
50
|
+
# A semigroup satisfies this property if its congruences should belong to
|
|
51
|
+
# CanUseLibsemigroupsCongruence.
|
|
52
|
+
DeclareProperty("CanUseLibsemigroupsCongruences", IsSemigroup);
|
|
53
|
+
|
|
54
|
+
InstallTrueMethod(CanUseLibsemigroupsCongruences,
|
|
55
|
+
IsSemigroup and CanUseFroidurePin);
|
|
56
|
+
InstallTrueMethod(CanUseLibsemigroupsCongruences,
|
|
57
|
+
IsFpSemigroup);
|
|
58
|
+
InstallTrueMethod(CanUseLibsemigroupsCongruences,
|
|
59
|
+
IsFpMonoid);
|
|
60
|
+
InstallTrueMethod(CanUseLibsemigroupsCongruences,
|
|
61
|
+
HasIsFreeSemigroup and IsFreeSemigroup);
|
|
62
|
+
InstallTrueMethod(CanUseLibsemigroupsCongruences,
|
|
63
|
+
HasIsFreeMonoid and IsFreeMonoid);
|
|
64
|
+
InstallTrueMethod(CanUseLibsemigroupsCongruence,
|
|
65
|
+
IsInverseSemigroupCongruenceByKernelTrace);
|
|
66
|
+
|
|
67
|
+
###########################################################################
|
|
68
|
+
# Functions/methods that are declared in this file and that use the
|
|
69
|
+
# libsemigroups object directly
|
|
70
|
+
###########################################################################
|
|
71
|
+
|
|
72
|
+
DeclareAttribute("LibsemigroupsCongruenceConstructor",
|
|
73
|
+
IsSemigroup and CanUseLibsemigroupsCongruences);
|
|
74
|
+
|
|
75
|
+
# Construct a libsemigroups::Congruence from some GAP object
|
|
76
|
+
|
|
77
|
+
InstallMethod(LibsemigroupsCongruenceConstructor,
|
|
78
|
+
"for a transformation semigroup with CanUseLibsemigroupsCongruences",
|
|
79
|
+
[IsTransformationSemigroup and CanUseLibsemigroupsCongruences],
|
|
80
|
+
function(S)
|
|
81
|
+
local N;
|
|
82
|
+
N := DegreeOfTransformationSemigroup(S);
|
|
83
|
+
if N <= 16 and IsBound(LIBSEMIGROUPS_HPCOMBI_ENABLED) then
|
|
84
|
+
return libsemigroups.Congruence.make_from_froidurepin_leasttransf;
|
|
85
|
+
elif N <= 2 ^ 16 then
|
|
86
|
+
return libsemigroups.Congruence.make_from_froidurepin_transfUInt2;
|
|
87
|
+
elif N <= 2 ^ 32 then
|
|
88
|
+
return libsemigroups.Congruence.make_from_froidurepin_transfUInt4;
|
|
89
|
+
else
|
|
90
|
+
# Cannot currently test the next line
|
|
91
|
+
Error("transformation degree is too high!");
|
|
92
|
+
fi;
|
|
93
|
+
end);
|
|
94
|
+
|
|
95
|
+
InstallMethod(LibsemigroupsCongruenceConstructor,
|
|
96
|
+
"for a partial perm semigroup with CanUseLibsemigroupsCongruences",
|
|
97
|
+
[IsPartialPermSemigroup and CanUseLibsemigroupsCongruences],
|
|
98
|
+
function(S)
|
|
99
|
+
local N;
|
|
100
|
+
N := Maximum(DegreeOfPartialPermSemigroup(S),
|
|
101
|
+
CodegreeOfPartialPermSemigroup(S));
|
|
102
|
+
if N <= 16 and IsBound(LIBSEMIGROUPS_HPCOMBI_ENABLED) then
|
|
103
|
+
return libsemigroups.Congruence.make_from_froidurepin_leastpperm;
|
|
104
|
+
elif N <= 2 ^ 16 then
|
|
105
|
+
return libsemigroups.Congruence.make_from_froidurepin_ppermUInt2;
|
|
106
|
+
elif N <= 2 ^ 32 then
|
|
107
|
+
return libsemigroups.Congruence.make_from_froidurepin_ppermUInt4;
|
|
108
|
+
else
|
|
109
|
+
# Cannot currently test the next line
|
|
110
|
+
Error("partial perm degree is too high!");
|
|
111
|
+
fi;
|
|
112
|
+
end);
|
|
113
|
+
|
|
114
|
+
InstallMethod(LibsemigroupsCongruenceConstructor,
|
|
115
|
+
"for a boolean matrix semigroup with CanUseLibsemigroupsCongruences",
|
|
116
|
+
[IsBooleanMatSemigroup and CanUseLibsemigroupsCongruences],
|
|
117
|
+
function(S)
|
|
118
|
+
if DimensionOfMatrixOverSemiring(Representative(S)) <= 8 then
|
|
119
|
+
return libsemigroups.Congruence.make_from_froidurepin_bmat8;
|
|
120
|
+
fi;
|
|
121
|
+
return libsemigroups.Congruence.make_from_froidurepin_bmat;
|
|
122
|
+
end);
|
|
123
|
+
|
|
124
|
+
# Why does this work for types other than boolean matrices?
|
|
125
|
+
InstallMethod(LibsemigroupsCongruenceConstructor,
|
|
126
|
+
"for a matrix semigroup with CanUseLibsemigroupsCongruences",
|
|
127
|
+
[IsMatrixOverSemiringSemigroup and CanUseLibsemigroupsCongruences],
|
|
128
|
+
_ -> libsemigroups.Congruence.make_from_froidurepin_bmat);
|
|
129
|
+
|
|
130
|
+
InstallMethod(LibsemigroupsCongruenceConstructor,
|
|
131
|
+
"for a bipartition semigroup with CanUseLibsemigroupsCongruences",
|
|
132
|
+
[IsBipartitionSemigroup and CanUseLibsemigroupsCongruences],
|
|
133
|
+
_ -> libsemigroups.Congruence.make_from_froidurepin_bipartition);
|
|
134
|
+
|
|
135
|
+
InstallMethod(LibsemigroupsCongruenceConstructor,
|
|
136
|
+
"for a PBR semigroup and CanUseLibsemigroupsCongruences",
|
|
137
|
+
[IsPBRSemigroup and CanUseLibsemigroupsCongruences],
|
|
138
|
+
_ -> libsemigroups.Congruence.make_from_froidurepin_pbr);
|
|
139
|
+
|
|
140
|
+
InstallMethod(LibsemigroupsCongruenceConstructor,
|
|
141
|
+
"for a quotient semigroup and CanUseLibsemigroupsCongruences",
|
|
142
|
+
[IsQuotientSemigroup and CanUseLibsemigroupsCongruences],
|
|
143
|
+
_ -> libsemigroups.Congruence.make_from_froidurepinbase);
|
|
144
|
+
|
|
145
|
+
# Get the libsemigroups::Congruence object associated to a GAP object
|
|
146
|
+
|
|
147
|
+
BindGlobal("LibsemigroupsCongruence",
|
|
148
|
+
function(C)
|
|
149
|
+
local S, make, CC, factor, N, tc, table, add_pair, pair;
|
|
150
|
+
|
|
151
|
+
Assert(1, CanUseLibsemigroupsCongruence(C));
|
|
152
|
+
|
|
153
|
+
if IsBound(C!.LibsemigroupsCongruence)
|
|
154
|
+
and IsValidGapbind14Object(C!.LibsemigroupsCongruence) then
|
|
155
|
+
# Tested in workspace tests
|
|
156
|
+
return C!.LibsemigroupsCongruence;
|
|
157
|
+
fi;
|
|
158
|
+
Unbind(C!.LibsemigroupsCongruence);
|
|
159
|
+
|
|
160
|
+
S := Range(C);
|
|
161
|
+
if IsFpSemigroup(S) or (HasIsFreeSemigroup(S) and IsFreeSemigroup(S))
|
|
162
|
+
or IsFpMonoid(S) or (HasIsFreeMonoid(S) and IsFreeMonoid(S)) then
|
|
163
|
+
make := libsemigroups.Congruence.make_from_fpsemigroup;
|
|
164
|
+
CC := make(CongruenceHandednessString(C), LibsemigroupsFpSemigroup(S));
|
|
165
|
+
factor := Factorization;
|
|
166
|
+
elif CanUseLibsemigroupsFroidurePin(S) then
|
|
167
|
+
CC := LibsemigroupsCongruenceConstructor(S)(CongruenceHandednessString(C),
|
|
168
|
+
LibsemigroupsFroidurePin(S));
|
|
169
|
+
factor := MinimalFactorization;
|
|
170
|
+
elif CanUseGapFroidurePin(S) then
|
|
171
|
+
N := Length(GeneratorsOfSemigroup(Range(C)));
|
|
172
|
+
tc := libsemigroups.ToddCoxeter.make(CongruenceHandednessString(C));
|
|
173
|
+
libsemigroups.ToddCoxeter.set_number_of_generators(tc, N);
|
|
174
|
+
if IsRightMagmaCongruence(C) then
|
|
175
|
+
table := RightCayleyGraphSemigroup(Range(C)) - 1;
|
|
176
|
+
else
|
|
177
|
+
table := LeftCayleyGraphSemigroup(Range(C)) - 1;
|
|
178
|
+
fi;
|
|
179
|
+
libsemigroups.ToddCoxeter.prefill(tc, table);
|
|
180
|
+
CC := libsemigroups.Congruence.make_from_table(
|
|
181
|
+
CongruenceHandednessString(C), "none");
|
|
182
|
+
libsemigroups.Congruence.set_number_of_generators(CC, N);
|
|
183
|
+
libsemigroups.Congruence.add_runner(CC, tc);
|
|
184
|
+
factor := MinimalFactorization;
|
|
185
|
+
else
|
|
186
|
+
TryNextMethod();
|
|
187
|
+
fi;
|
|
188
|
+
add_pair := libsemigroups.Congruence.add_pair;
|
|
189
|
+
for pair in GeneratingPairsOfLeftRightOrTwoSidedCongruence(C) do
|
|
190
|
+
add_pair(CC, factor(S, pair[1]) - 1, factor(S, pair[2]) - 1);
|
|
191
|
+
od;
|
|
192
|
+
C!.LibsemigroupsCongruence := CC;
|
|
193
|
+
return CC;
|
|
194
|
+
end);
|
|
195
|
+
|
|
196
|
+
########################################################################
|
|
197
|
+
|
|
198
|
+
DeclareOperation("CongruenceWordToClassIndex",
|
|
199
|
+
[CanUseLibsemigroupsCongruence, IsHomogeneousList]);
|
|
200
|
+
DeclareOperation("CongruenceWordToClassIndex",
|
|
201
|
+
[CanUseLibsemigroupsCongruence, IsMultiplicativeElement]);
|
|
202
|
+
|
|
203
|
+
InstallMethod(CongruenceWordToClassIndex,
|
|
204
|
+
"for CanUseLibsemigroupsCongruence and hom. list",
|
|
205
|
+
[CanUseLibsemigroupsCongruence, IsHomogeneousList],
|
|
206
|
+
function(C, word)
|
|
207
|
+
local CC;
|
|
208
|
+
CC := LibsemigroupsCongruence(C);
|
|
209
|
+
return libsemigroups.Congruence.word_to_class_index(CC, word - 1) + 1;
|
|
210
|
+
end);
|
|
211
|
+
|
|
212
|
+
InstallMethod(CongruenceWordToClassIndex,
|
|
213
|
+
"for CanUseLibsemigroupsCongruence and hom. list",
|
|
214
|
+
[CanUseLibsemigroupsCongruence, IsMultiplicativeElement],
|
|
215
|
+
{C, x} -> CongruenceWordToClassIndex(C, MinimalFactorization(Range(C), x)));
|
|
216
|
+
|
|
217
|
+
########################################################################
|
|
218
|
+
|
|
219
|
+
InstallMethod(CongruenceLessNC,
|
|
220
|
+
"for CanUseLibsemigroupsCongruence and two mult. elements",
|
|
221
|
+
[CanUseLibsemigroupsCongruence,
|
|
222
|
+
IsMultiplicativeElement,
|
|
223
|
+
IsMultiplicativeElement],
|
|
224
|
+
function(C, elm1, elm2)
|
|
225
|
+
local S, pos1, pos2, lookup, word1, word2, CC;
|
|
226
|
+
|
|
227
|
+
S := Range(C);
|
|
228
|
+
if CanUseFroidurePin(S) then
|
|
229
|
+
pos1 := PositionCanonical(S, elm1);
|
|
230
|
+
pos2 := PositionCanonical(S, elm2);
|
|
231
|
+
if HasEquivalenceRelationCanonicalLookup(C) then
|
|
232
|
+
lookup := EquivalenceRelationCanonicalLookup(C);
|
|
233
|
+
return lookup[pos1] < lookup[pos2];
|
|
234
|
+
else
|
|
235
|
+
word1 := MinimalFactorization(S, pos1);
|
|
236
|
+
word2 := MinimalFactorization(S, pos2);
|
|
237
|
+
fi;
|
|
238
|
+
elif IsFpSemigroup(S) or (HasIsFreeSemigroup(S) and IsFreeSemigroup(S))
|
|
239
|
+
or IsFpMonoid(S) or (HasIsFreeMonoid(S) and IsFreeMonoid(S))
|
|
240
|
+
or IsQuotientSemigroup(S) then
|
|
241
|
+
word1 := Factorization(S, elm1);
|
|
242
|
+
word2 := Factorization(S, elm2);
|
|
243
|
+
else
|
|
244
|
+
# Cannot currently test the next line
|
|
245
|
+
Assert(0, false);
|
|
246
|
+
fi;
|
|
247
|
+
CC := LibsemigroupsCongruence(C);
|
|
248
|
+
return libsemigroups.Congruence.less(CC, word1 - 1, word2 - 1);
|
|
249
|
+
end);
|
|
250
|
+
|
|
251
|
+
###########################################################################
|
|
252
|
+
# Functions/methods that are declared elsewhere and that use the
|
|
253
|
+
# libsemigroups object directly
|
|
254
|
+
###########################################################################
|
|
255
|
+
|
|
256
|
+
InstallMethod(NrEquivalenceClasses,
|
|
257
|
+
"for CanUseLibsemigroupsCongruence with known generating pairs",
|
|
258
|
+
[CanUseLibsemigroupsCongruence and
|
|
259
|
+
HasGeneratingPairsOfLeftRightOrTwoSidedCongruence],
|
|
260
|
+
function(C)
|
|
261
|
+
local number_of_classes, result;
|
|
262
|
+
number_of_classes := libsemigroups.Congruence.number_of_classes;
|
|
263
|
+
result := number_of_classes(LibsemigroupsCongruence(C));
|
|
264
|
+
if result = -2 then
|
|
265
|
+
return infinity;
|
|
266
|
+
fi;
|
|
267
|
+
return result;
|
|
268
|
+
end);
|
|
269
|
+
|
|
270
|
+
InstallMethod(CongruenceTestMembershipNC,
|
|
271
|
+
"for CanUseLibsemigroupsCongruence with known gen. pairs and 2 mult. elts",
|
|
272
|
+
[CanUseLibsemigroupsCongruence and
|
|
273
|
+
HasGeneratingPairsOfLeftRightOrTwoSidedCongruence,
|
|
274
|
+
IsMultiplicativeElement,
|
|
275
|
+
IsMultiplicativeElement],
|
|
276
|
+
100,
|
|
277
|
+
function(C, elm1, elm2)
|
|
278
|
+
local S, pos1, pos2, lookup, word1, word2, CC;
|
|
279
|
+
|
|
280
|
+
S := Range(C);
|
|
281
|
+
if IsFpSemigroup(S) or (HasIsFreeSemigroup(S) and IsFreeSemigroup(S))
|
|
282
|
+
or IsFpMonoid(S) or (HasIsFreeMonoid(S) and IsFreeMonoid(S)) then
|
|
283
|
+
word1 := Factorization(S, elm1);
|
|
284
|
+
word2 := Factorization(S, elm2);
|
|
285
|
+
elif CanUseFroidurePin(S) then
|
|
286
|
+
pos1 := PositionCanonical(S, elm1);
|
|
287
|
+
pos2 := PositionCanonical(S, elm2);
|
|
288
|
+
if HasEquivalenceRelationLookup(C) then
|
|
289
|
+
lookup := EquivalenceRelationLookup(C);
|
|
290
|
+
return lookup[pos1] = lookup[pos2];
|
|
291
|
+
else
|
|
292
|
+
word1 := MinimalFactorization(S, pos1);
|
|
293
|
+
word2 := MinimalFactorization(S, pos2);
|
|
294
|
+
fi;
|
|
295
|
+
else
|
|
296
|
+
# Cannot currently test the next line
|
|
297
|
+
Assert(0, false);
|
|
298
|
+
fi;
|
|
299
|
+
CC := LibsemigroupsCongruence(C);
|
|
300
|
+
return libsemigroups.Congruence.contains(CC, word1 - 1, word2 - 1);
|
|
301
|
+
end);
|
|
302
|
+
|
|
303
|
+
InstallMethod(EquivalenceRelationPartition,
|
|
304
|
+
"for CanUseLibsemigroupsCongruence with known generating pairs",
|
|
305
|
+
[CanUseLibsemigroupsCongruence and
|
|
306
|
+
HasGeneratingPairsOfLeftRightOrTwoSidedCongruence],
|
|
307
|
+
function(C)
|
|
308
|
+
local S, CC, ntc, gens, class, i, j;
|
|
309
|
+
S := Range(C);
|
|
310
|
+
if not IsFinite(S) or CanUseLibsemigroupsFroidurePin(S) then
|
|
311
|
+
CC := LibsemigroupsCongruence(C);
|
|
312
|
+
ntc := libsemigroups.Congruence.ntc(CC) + 1;
|
|
313
|
+
gens := GeneratorsOfSemigroup(S);
|
|
314
|
+
for i in [1 .. Length(ntc)] do
|
|
315
|
+
class := ntc[i];
|
|
316
|
+
for j in [1 .. Length(class)] do
|
|
317
|
+
class[j] := EvaluateWord(gens, class[j]);
|
|
318
|
+
od;
|
|
319
|
+
od;
|
|
320
|
+
return ntc;
|
|
321
|
+
elif CanUseGapFroidurePin(S) then
|
|
322
|
+
# in this case libsemigroups.Congruence.ntc doesn't work, because S is not
|
|
323
|
+
# represented in the libsemigroups object
|
|
324
|
+
return Filtered(EquivalenceRelationPartitionWithSingletons(C),
|
|
325
|
+
x -> Size(x) > 1);
|
|
326
|
+
fi;
|
|
327
|
+
TryNextMethod();
|
|
328
|
+
end);
|
|
329
|
+
|
|
330
|
+
# Methods for congruence classes
|
|
331
|
+
|
|
332
|
+
InstallMethod(\<,
|
|
333
|
+
"for congruence classes of CanUseLibsemigroupsCongruence", IsIdenticalObj,
|
|
334
|
+
[IsLeftRightOrTwoSidedCongruenceClass, IsLeftRightOrTwoSidedCongruenceClass],
|
|
335
|
+
1, # to beat the method in congruences/cong.gi for
|
|
336
|
+
# IsLeftRightOrTwoSidedCongruenceClass
|
|
337
|
+
function(class1, class2)
|
|
338
|
+
local C, word1, word2, CC;
|
|
339
|
+
|
|
340
|
+
C := EquivalenceClassRelation(class1);
|
|
341
|
+
if not CanUseLibsemigroupsCongruence(C)
|
|
342
|
+
or not HasGeneratingPairsOfLeftRightOrTwoSidedCongruence(C) then
|
|
343
|
+
TryNextMethod();
|
|
344
|
+
elif C <> EquivalenceClassRelation(class2) then
|
|
345
|
+
return false;
|
|
346
|
+
fi;
|
|
347
|
+
|
|
348
|
+
word1 := Factorization(Range(C), Representative(class1));
|
|
349
|
+
word2 := Factorization(Range(C), Representative(class2));
|
|
350
|
+
CC := LibsemigroupsCongruence(C);
|
|
351
|
+
return libsemigroups.Congruence.less(CC, word1 - 1, word2 - 1);
|
|
352
|
+
end);
|
|
353
|
+
|
|
354
|
+
InstallMethod(EquivalenceClasses,
|
|
355
|
+
"for CanUseLibsemigroupsCongruence with known generating pairs",
|
|
356
|
+
[CanUseLibsemigroupsCongruence and
|
|
357
|
+
HasGeneratingPairsOfLeftRightOrTwoSidedCongruence],
|
|
358
|
+
function(C)
|
|
359
|
+
local result, CC, gens, class_index_to_word, rep, i;
|
|
360
|
+
|
|
361
|
+
if NrEquivalenceClasses(C) = infinity then
|
|
362
|
+
ErrorNoReturn("the argument (a congruence) must have a finite ",
|
|
363
|
+
"number of classes");
|
|
364
|
+
fi;
|
|
365
|
+
|
|
366
|
+
result := EmptyPlist(NrEquivalenceClasses(C));
|
|
367
|
+
CC := LibsemigroupsCongruence(C);
|
|
368
|
+
gens := GeneratorsOfSemigroup(Range(C));
|
|
369
|
+
class_index_to_word := libsemigroups.Congruence.class_index_to_word;
|
|
370
|
+
for i in [1 .. NrEquivalenceClasses(C)] do
|
|
371
|
+
rep := EvaluateWord(gens, class_index_to_word(CC, i - 1) + 1);
|
|
372
|
+
result[i] := EquivalenceClassOfElementNC(C, rep);
|
|
373
|
+
od;
|
|
374
|
+
return result;
|
|
375
|
+
end);
|
|
376
|
+
|
|
377
|
+
###########################################################################
|
|
378
|
+
# Methods NOT using libsemigroups object directly but that use an
|
|
379
|
+
# operation or function that only applies to CanUseLibsemigroupsCongruence
|
|
380
|
+
###########################################################################
|
|
381
|
+
|
|
382
|
+
InstallMethod(EquivalenceRelationPartitionWithSingletons,
|
|
383
|
+
"for CanUseLibsemigroupsCongruence with known generating pairs",
|
|
384
|
+
[CanUseLibsemigroupsCongruence and
|
|
385
|
+
HasGeneratingPairsOfLeftRightOrTwoSidedCongruence],
|
|
386
|
+
function(C)
|
|
387
|
+
local part, word, i, x;
|
|
388
|
+
if not IsFinite(Range(C)) then
|
|
389
|
+
ErrorNoReturn("the argument (a congruence) must have finite range");
|
|
390
|
+
fi;
|
|
391
|
+
|
|
392
|
+
part := [];
|
|
393
|
+
for x in Range(C) do
|
|
394
|
+
word := MinimalFactorization(Range(C), x);
|
|
395
|
+
i := CongruenceWordToClassIndex(C, word);
|
|
396
|
+
if not IsBound(part[i]) then
|
|
397
|
+
part[i] := [];
|
|
398
|
+
fi;
|
|
399
|
+
Add(part[i], x);
|
|
400
|
+
od;
|
|
401
|
+
|
|
402
|
+
return part;
|
|
403
|
+
end);
|
|
404
|
+
|
|
405
|
+
InstallMethod(ImagesElm,
|
|
406
|
+
"for CanUseLibsemigroupsCongruence with known gen. pairs and a mult. elt.",
|
|
407
|
+
[CanUseLibsemigroupsCongruence and
|
|
408
|
+
HasGeneratingPairsOfLeftRightOrTwoSidedCongruence, IsMultiplicativeElement],
|
|
409
|
+
function(cong, elm)
|
|
410
|
+
local lookup, id, part, pos;
|
|
411
|
+
|
|
412
|
+
if HasIsFinite(Range(cong)) and IsFinite(Range(cong))
|
|
413
|
+
and CanUseFroidurePin(Range(cong)) then
|
|
414
|
+
lookup := EquivalenceRelationCanonicalLookup(cong);
|
|
415
|
+
id := lookup[PositionCanonical(Range(cong), elm)];
|
|
416
|
+
return EnumeratorCanonical(Range(cong)){Positions(lookup, id)};
|
|
417
|
+
elif IsFpSemigroup(Range(cong))
|
|
418
|
+
or (HasIsFreeSemigroup(Range(cong)) and IsFreeSemigroup(Range(cong)))
|
|
419
|
+
or IsFpMonoid(Range(cong))
|
|
420
|
+
or (HasIsFreeMonoid(Range(cong)) and IsFreeMonoid(Range(cong)))
|
|
421
|
+
or IsQuotientSemigroup(Range(cong)) then
|
|
422
|
+
part := EquivalenceRelationPartition(cong);
|
|
423
|
+
pos := PositionProperty(part, l -> [elm, l[1]] in cong);
|
|
424
|
+
if pos = fail then
|
|
425
|
+
return [elm]; # singleton
|
|
426
|
+
fi;
|
|
427
|
+
return part[pos]; # non-singleton
|
|
428
|
+
fi;
|
|
429
|
+
# Shouldn't be able to reach here
|
|
430
|
+
Assert(0, false);
|
|
431
|
+
end);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## libsemigroups/fpsemi.gd
|
|
4
|
+
## Copyright (C) 2022 James D. Mitchell
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
# This file exists to construct a libsemigroups FpSemigroup object for an fp
|
|
12
|
+
# semigroup or monoid. The resulting libsemigroups::FpSemigroup object is only
|
|
13
|
+
# used to initialize a libsemigroups::Congruence object where most questions
|
|
14
|
+
# asked about FpSemigroup/FpMonoids will be answered.
|
|
15
|
+
|
|
16
|
+
DeclareGlobalFunction("LibsemigroupsFpSemigroup");
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## libsemigroups/fpsemi.gi
|
|
4
|
+
## Copyright (C) 2022 James D. Mitchell
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
InstallGlobalFunction("LibsemigroupsFpSemigroup",
|
|
12
|
+
function(S)
|
|
13
|
+
local F, SS, R, add_rule, pair;
|
|
14
|
+
|
|
15
|
+
Assert(1, IsFpSemigroup(S) or (HasIsFreeSemigroup(S) and IsFreeSemigroup(S))
|
|
16
|
+
or IsFpMonoid(S) or (HasIsFreeMonoid(S) and IsFreeMonoid(S)));
|
|
17
|
+
|
|
18
|
+
if IsBound(S!.LibsemigroupsFpSemigroup)
|
|
19
|
+
and IsValidGapbind14Object(S!.LibsemigroupsFpSemigroup) then
|
|
20
|
+
return S!.LibsemigroupsFpSemigroup;
|
|
21
|
+
fi;
|
|
22
|
+
Unbind(S!.LibsemigroupsFpSemigroup);
|
|
23
|
+
if IsFpSemigroup(S) then
|
|
24
|
+
F := FreeSemigroupOfFpSemigroup(S);
|
|
25
|
+
elif IsFpMonoid(S) then
|
|
26
|
+
F := FreeMonoidOfFpMonoid(S);
|
|
27
|
+
else
|
|
28
|
+
# Free semigroup or monoid
|
|
29
|
+
F := S;
|
|
30
|
+
fi;
|
|
31
|
+
|
|
32
|
+
SS := libsemigroups.FpSemigroup.make();
|
|
33
|
+
libsemigroups.FpSemigroup.set_alphabet(SS, Size(GeneratorsOfSemigroup(S)));
|
|
34
|
+
|
|
35
|
+
if IsMonoid(S) then
|
|
36
|
+
# The identity must be 0 so that this corresponds to what happens in
|
|
37
|
+
# FroidurePin, where GeneratorsOfSemigroup(S) is used and the identity is
|
|
38
|
+
# the first entry.
|
|
39
|
+
libsemigroups.FpSemigroup.set_identity(SS, 0);
|
|
40
|
+
R := RelationsOfFpMonoid(S);
|
|
41
|
+
else
|
|
42
|
+
R := RelationsOfFpSemigroup(S);
|
|
43
|
+
fi;
|
|
44
|
+
|
|
45
|
+
add_rule := libsemigroups.FpSemigroup.add_rule;
|
|
46
|
+
for pair in R do
|
|
47
|
+
add_rule(SS,
|
|
48
|
+
Factorization(F, pair[1]) - 1,
|
|
49
|
+
Factorization(F, pair[2]) - 1);
|
|
50
|
+
od;
|
|
51
|
+
S!.LibsemigroupsFpSemigroup := SS;
|
|
52
|
+
return SS;
|
|
53
|
+
end);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
###########################################################################
|
|
2
|
+
##
|
|
3
|
+
## libsemigroups/froidure-pin.gd
|
|
4
|
+
## Copyright (C) 2022 James D. Mitchell
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
# This file contains declarations for the interface with
|
|
12
|
+
# libsemigroups::FroidurePin
|
|
13
|
+
|
|
14
|
+
DeclareGlobalFunction("LibsemigroupsFroidurePin");
|
|
15
|
+
|
|
16
|
+
DeclareProperty("CanUseLibsemigroupsFroidurePin", IsSemigroup);
|
|
17
|
+
DeclareOperation("HasLibsemigroupsFroidurePin", [IsSemigroup]);
|