passagemath-gap-pkg-semigroups 10.6.30__cp312-abi3-macosx_13_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-gap-pkg-semigroups might be problematic. Click here for more details.
- gap/pkg/semigroups/CHANGELOG.md +1699 -0
- gap/pkg/semigroups/CONTRIBUTING.md +91 -0
- gap/pkg/semigroups/GNUmakefile +110 -0
- gap/pkg/semigroups/GNUmakefile.in +110 -0
- gap/pkg/semigroups/GPL +674 -0
- gap/pkg/semigroups/LICENSE +16 -0
- gap/pkg/semigroups/Makefile +26 -0
- gap/pkg/semigroups/Makefile.gappkg +225 -0
- gap/pkg/semigroups/PackageInfo.g +529 -0
- gap/pkg/semigroups/README.md +102 -0
- gap/pkg/semigroups/VERSIONS +112 -0
- gap/pkg/semigroups/aclocal.m4 +375 -0
- gap/pkg/semigroups/autogen.sh +25 -0
- gap/pkg/semigroups/bin/aarch64-apple-darwin23-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1158 -0
- gap/pkg/semigroups/config.status +1131 -0
- gap/pkg/semigroups/config.sub +1960 -0
- gap/pkg/semigroups/configure +9742 -0
- gap/pkg/semigroups/configure.ac +71 -0
- gap/pkg/semigroups/data/doc/greens.pickle +1 -0
- gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
- gap/pkg/semigroups/data/tst/bipart4 +10 -0
- gap/pkg/semigroups/data/tst/pperm10 +1 -0
- gap/pkg/semigroups/data/tst/tables.gz +0 -0
- gap/pkg/semigroups/data/tst/testdata +1 -0
- gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
- gap/pkg/semigroups/data/tst/trans3 +7 -0
- gap/pkg/semigroups/data/tst/trans3-old +7 -0
- gap/pkg/semigroups/environment.yml +7 -0
- gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
- gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
- gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
- gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
- gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
- gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
- gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
- gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
- gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
- gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
- gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
- gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
- gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
- gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
- gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
- gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
- gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
- gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
- gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
- gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
- gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
- gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
- gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
- gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
- gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
- gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
- gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
- gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
- gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
- gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
- gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
- gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
- gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
- gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
- gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
- gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
- gap/pkg/semigroups/gap/elements/elements.gd +11 -0
- gap/pkg/semigroups/gap/elements/elements.gi +121 -0
- gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
- gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
- gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
- gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
- gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
- gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
- gap/pkg/semigroups/gap/elements/star.gd +21 -0
- gap/pkg/semigroups/gap/elements/star.gi +21 -0
- gap/pkg/semigroups/gap/elements/trans.gd +13 -0
- gap/pkg/semigroups/gap/elements/trans.gi +50 -0
- gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
- gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
- gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
- gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
- gap/pkg/semigroups/gap/fp/word.gd +15 -0
- gap/pkg/semigroups/gap/fp/word.gi +67 -0
- gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
- gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
- gap/pkg/semigroups/gap/greens/acting.gd +81 -0
- gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
- gap/pkg/semigroups/gap/greens/generic.gd +117 -0
- gap/pkg/semigroups/gap/greens/generic.gi +630 -0
- gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
- gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
- gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
- gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
- gap/pkg/semigroups/gap/main/acting.gd +36 -0
- gap/pkg/semigroups/gap/main/acting.gi +779 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
- gap/pkg/semigroups/gap/main/graded.gd +26 -0
- gap/pkg/semigroups/gap/main/graded.gi +355 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
- gap/pkg/semigroups/gap/main/orbits.gd +24 -0
- gap/pkg/semigroups/gap/main/orbits.gi +512 -0
- gap/pkg/semigroups/gap/main/semiact.gd +20 -0
- gap/pkg/semigroups/gap/main/semiact.gi +821 -0
- gap/pkg/semigroups/gap/main/setup.gd +61 -0
- gap/pkg/semigroups/gap/main/setup.gi +1094 -0
- gap/pkg/semigroups/gap/obsolete.gd +9 -0
- gap/pkg/semigroups/gap/obsolete.gi +14 -0
- gap/pkg/semigroups/gap/options.g +55 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
- gap/pkg/semigroups/gap/tools/display.gd +24 -0
- gap/pkg/semigroups/gap/tools/display.gi +749 -0
- gap/pkg/semigroups/gap/tools/io.gd +17 -0
- gap/pkg/semigroups/gap/tools/io.gi +543 -0
- gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
- gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
- gap/pkg/semigroups/gap/tools/utils.gd +19 -0
- gap/pkg/semigroups/gap/tools/utils.gi +756 -0
- gap/pkg/semigroups/gapbind14/.ccls +18 -0
- gap/pkg/semigroups/gapbind14/.clang-format +104 -0
- gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
- gap/pkg/semigroups/gapbind14/LICENSE +674 -0
- gap/pkg/semigroups/gapbind14/README.md +76 -0
- gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
- gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
- gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
- gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
- gap/pkg/semigroups/gapbind14/demo/configure +34 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
- gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
- gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
- gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
- gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
- gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
- gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
- gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
- gap/pkg/semigroups/init.g +150 -0
- gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
- gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
- gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
- gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
- gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
- gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
- gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
- gap/pkg/semigroups/m4/find_gap.m4 +94 -0
- gap/pkg/semigroups/makedoc.g +153 -0
- gap/pkg/semigroups/prerequisites.sh +62 -0
- gap/pkg/semigroups/read.g +105 -0
- gap/pkg/semigroups/release.toml +6 -0
- gap/pkg/semigroups/tst/extreme/README +2 -0
- gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
- gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
- gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
- gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
- gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
- gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
- gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
- gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
- gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
- gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
- gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
- gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
- gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
- gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
- gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
- gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
- gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
- gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
- gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
- gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
- gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
- gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
- gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
- gap/pkg/semigroups/tst/standard/README +2 -0
- gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
- gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
- gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
- gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
- gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
- gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
- gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
- gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
- gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
- gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
- gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
- gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
- gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
- gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
- gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
- gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
- gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
- gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
- gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
- gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
- gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
- gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
- gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
- gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
- gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
- gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
- gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
- gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
- gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
- gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
- gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
- gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
- gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
- gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
- gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
- gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
- gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
- gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
- gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
- gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
- gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
- gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
- gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
- gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
- gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
- gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
- gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
- gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
- gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
- gap/pkg/semigroups/tst/standard/options.tst +54 -0
- gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
- gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
- gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
- gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
- gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
- gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
- gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
- gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
- gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
- gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
- gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
- gap/pkg/semigroups/tst/testinstall.tst +1815 -0
- gap/pkg/semigroups/tst/teststandard.g +22 -0
- gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
- gap/pkg/semigroups/tst/workspaces/load.g +11 -0
- gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
- gap/pkg/semigroups/tst/workspaces/save.g +14 -0
- passagemath_gap_pkg_semigroups-10.6.30.dist-info/METADATA +93 -0
- passagemath_gap_pkg_semigroups-10.6.30.dist-info/METADATA.bak +94 -0
- passagemath_gap_pkg_semigroups-10.6.30.dist-info/RECORD +354 -0
- passagemath_gap_pkg_semigroups-10.6.30.dist-info/WHEEL +6 -0
- passagemath_gap_pkg_semigroups-10.6.30.dist-info/top_level.txt +1 -0
- passagemath_gap_pkg_semigroups.dylibs/libsemigroups.2.dylib +0 -0
- sage/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/gap_pkg_semigroups.abi3.so +0 -0
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
############################################################################
|
|
2
|
+
##
|
|
3
|
+
## congruences/congpart.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
|
+
## This file contains implementations for left, right, and two-sided
|
|
11
|
+
## congruences that can compute EquivalenceRelationPartition. Please read the
|
|
12
|
+
## comments in congruences/congpart.gd.
|
|
13
|
+
|
|
14
|
+
#############################################################################
|
|
15
|
+
# Constructor by generating pairs
|
|
16
|
+
#############################################################################
|
|
17
|
+
|
|
18
|
+
BindGlobal("_AnyCongruenceByGeneratingPairs",
|
|
19
|
+
function(S, pairs, filt)
|
|
20
|
+
local fam, C, pair;
|
|
21
|
+
|
|
22
|
+
for pair in pairs do
|
|
23
|
+
if not IsList(pair) or Length(pair) <> 2 then
|
|
24
|
+
Error("the 2nd argument <pairs> must consist of lists of ",
|
|
25
|
+
"length 2");
|
|
26
|
+
elif not pair[1] in S or not pair[2] in S then
|
|
27
|
+
Error("the 2nd argument <pairs> must consist of lists of ",
|
|
28
|
+
"elements of the 1st argument <S> (a semigroup)");
|
|
29
|
+
fi;
|
|
30
|
+
od;
|
|
31
|
+
|
|
32
|
+
# Create the Object
|
|
33
|
+
fam := GeneralMappingsFamily(ElementsFamily(FamilyObj(S)),
|
|
34
|
+
ElementsFamily(FamilyObj(S)));
|
|
35
|
+
|
|
36
|
+
C := Objectify(NewType(fam, filt and IsAttributeStoringRep),
|
|
37
|
+
rec());
|
|
38
|
+
SetSource(C, S);
|
|
39
|
+
SetRange(C, S);
|
|
40
|
+
return C;
|
|
41
|
+
end);
|
|
42
|
+
|
|
43
|
+
InstallMethod(SemigroupCongruenceByGeneratingPairs,
|
|
44
|
+
"for a semigroup and a list",
|
|
45
|
+
[IsSemigroup, IsList],
|
|
46
|
+
19, # to beat the library method for IsList and IsEmpty
|
|
47
|
+
function(S, pairs)
|
|
48
|
+
local filt, C;
|
|
49
|
+
if not (CanUseFroidurePin(S) or IsFpSemigroup(S) or IsFpMonoid(S)
|
|
50
|
+
or (HasIsFreeSemigroup(S) and IsFreeSemigroup(S))
|
|
51
|
+
or (HasIsFreeMonoid(S) and IsFreeMonoid(S))) then
|
|
52
|
+
TryNextMethod();
|
|
53
|
+
fi;
|
|
54
|
+
filt := IsSemigroupCongruence
|
|
55
|
+
and IsMagmaCongruence
|
|
56
|
+
and CanComputeEquivalenceRelationPartition;
|
|
57
|
+
C := _AnyCongruenceByGeneratingPairs(S, pairs, filt);
|
|
58
|
+
SetGeneratingPairsOfMagmaCongruence(C, pairs);
|
|
59
|
+
return C;
|
|
60
|
+
end);
|
|
61
|
+
|
|
62
|
+
InstallMethod(LeftSemigroupCongruenceByGeneratingPairs,
|
|
63
|
+
"for a semigroup and a list",
|
|
64
|
+
[IsSemigroup, IsList],
|
|
65
|
+
19, # to beat the library method for IsList and IsEmpty
|
|
66
|
+
function(S, pairs)
|
|
67
|
+
local filt, C;
|
|
68
|
+
if not (CanUseFroidurePin(S) or IsFpSemigroup(S) or IsFpMonoid(S)
|
|
69
|
+
or (HasIsFreeSemigroup(S) and IsFreeSemigroup(S))
|
|
70
|
+
or (HasIsFreeMonoid(S) and IsFreeMonoid(S))) then
|
|
71
|
+
TryNextMethod();
|
|
72
|
+
fi;
|
|
73
|
+
filt := IsLeftSemigroupCongruence
|
|
74
|
+
and IsLeftMagmaCongruence
|
|
75
|
+
and CanComputeEquivalenceRelationPartition;
|
|
76
|
+
C := _AnyCongruenceByGeneratingPairs(S, pairs, filt);
|
|
77
|
+
SetGeneratingPairsOfLeftMagmaCongruence(C, pairs);
|
|
78
|
+
return C;
|
|
79
|
+
end);
|
|
80
|
+
|
|
81
|
+
InstallMethod(RightSemigroupCongruenceByGeneratingPairs,
|
|
82
|
+
"for a semigroup and a list",
|
|
83
|
+
[IsSemigroup, IsList],
|
|
84
|
+
19, # to beat the library method for IsList and IsEmpty
|
|
85
|
+
function(S, pairs)
|
|
86
|
+
local filt, C;
|
|
87
|
+
if not (CanUseFroidurePin(S) or IsFpSemigroup(S) or IsFpMonoid(S)
|
|
88
|
+
or (HasIsFreeSemigroup(S) and IsFreeSemigroup(S))
|
|
89
|
+
or (HasIsFreeMonoid(S) and IsFreeMonoid(S))) then
|
|
90
|
+
TryNextMethod();
|
|
91
|
+
fi;
|
|
92
|
+
filt := IsRightSemigroupCongruence
|
|
93
|
+
and IsRightMagmaCongruence
|
|
94
|
+
and CanComputeEquivalenceRelationPartition;
|
|
95
|
+
C := _AnyCongruenceByGeneratingPairs(S, pairs, filt);
|
|
96
|
+
SetGeneratingPairsOfRightMagmaCongruence(C, pairs);
|
|
97
|
+
return C;
|
|
98
|
+
end);
|
|
99
|
+
|
|
100
|
+
############################################################################
|
|
101
|
+
# Congruence attributes that do use FroidurePin directly
|
|
102
|
+
############################################################################
|
|
103
|
+
|
|
104
|
+
InstallMethod(EquivalenceRelationPartitionWithSingletons,
|
|
105
|
+
"for left, right, or 2-sided congruence that can compute partition",
|
|
106
|
+
[CanComputeEquivalenceRelationPartition],
|
|
107
|
+
function(C)
|
|
108
|
+
local S, lookup, result, enum, i;
|
|
109
|
+
|
|
110
|
+
S := Range(C);
|
|
111
|
+
if not IsFinite(S) then
|
|
112
|
+
ErrorNoReturn("the argument (a ",
|
|
113
|
+
CongruenceHandednessString(C),
|
|
114
|
+
" congruence) must have finite range");
|
|
115
|
+
elif not CanUseFroidurePin(S) then
|
|
116
|
+
# CanUseFroidurePin is required because PositionCanonical is not a thing
|
|
117
|
+
# for other types of semigroups.
|
|
118
|
+
TryNextMethod();
|
|
119
|
+
fi;
|
|
120
|
+
lookup := EquivalenceRelationCanonicalLookup(C);
|
|
121
|
+
result := List([1 .. NrEquivalenceClasses(C)], x -> []);
|
|
122
|
+
enum := EnumeratorCanonical(S);
|
|
123
|
+
for i in [1 .. Size(S)] do
|
|
124
|
+
Add(result[lookup[i]], enum[i]);
|
|
125
|
+
od;
|
|
126
|
+
|
|
127
|
+
return result;
|
|
128
|
+
end);
|
|
129
|
+
|
|
130
|
+
InstallMethod(EquivalenceRelationLookup,
|
|
131
|
+
"for a left, right, or 2-sided congruence that can compute partition",
|
|
132
|
+
[CanComputeEquivalenceRelationPartition],
|
|
133
|
+
function(C)
|
|
134
|
+
local S, lookup, class, nr, elm;
|
|
135
|
+
S := Range(C);
|
|
136
|
+
if not IsFinite(S) then
|
|
137
|
+
ErrorNoReturn("the argument (a ",
|
|
138
|
+
CongruenceHandednessString(C),
|
|
139
|
+
" congruence) must have finite range");
|
|
140
|
+
elif not CanUseFroidurePin(S) then
|
|
141
|
+
# CanUseFroidurePin is required because PositionCanonical is not a thing
|
|
142
|
+
# for other types of semigroups.
|
|
143
|
+
TryNextMethod();
|
|
144
|
+
fi;
|
|
145
|
+
|
|
146
|
+
lookup := [1 .. Size(S)];
|
|
147
|
+
for class in EquivalenceRelationPartition(C) do
|
|
148
|
+
nr := PositionCanonical(S, Representative(class));
|
|
149
|
+
for elm in class do
|
|
150
|
+
lookup[PositionCanonical(S, elm)] := nr;
|
|
151
|
+
od;
|
|
152
|
+
od;
|
|
153
|
+
return lookup;
|
|
154
|
+
end);
|
|
155
|
+
|
|
156
|
+
InstallMethod(EquivalenceRelationCanonicalPartition,
|
|
157
|
+
"for a left, right, or 2-sided congruence that can compute partition",
|
|
158
|
+
[CanComputeEquivalenceRelationPartition],
|
|
159
|
+
function(C)
|
|
160
|
+
local S, result, cmp, i;
|
|
161
|
+
S := Range(C);
|
|
162
|
+
if not IsFinite(S) then
|
|
163
|
+
ErrorNoReturn("the argument (a ",
|
|
164
|
+
CongruenceHandednessString(C),
|
|
165
|
+
" congruence) must have finite range");
|
|
166
|
+
elif not CanUseFroidurePin(S) then
|
|
167
|
+
# CanUseFroidurePin is required because PositionCanonical is not a thing
|
|
168
|
+
# for other types of semigroups.
|
|
169
|
+
TryNextMethod();
|
|
170
|
+
fi;
|
|
171
|
+
result := ShallowCopy(EquivalenceRelationPartition(C));
|
|
172
|
+
cmp := {x, y} -> PositionCanonical(S, x) < PositionCanonical(S, y);
|
|
173
|
+
for i in [1 .. Length(result)] do
|
|
174
|
+
result[i] := ShallowCopy(result[i]);
|
|
175
|
+
Sort(result[i], cmp);
|
|
176
|
+
od;
|
|
177
|
+
Sort(result, {x, y} -> cmp(Representative(x), Representative(y)));
|
|
178
|
+
return result;
|
|
179
|
+
end);
|
|
180
|
+
|
|
181
|
+
############################################################################
|
|
182
|
+
# Congruence attributes/operations/etc that don't require CanUseFroidurePin
|
|
183
|
+
############################################################################
|
|
184
|
+
|
|
185
|
+
InstallMethod(EquivalenceRelationPartition,
|
|
186
|
+
"for left, right, or 2-sided congruence that can compute partition",
|
|
187
|
+
[CanComputeEquivalenceRelationPartition],
|
|
188
|
+
function(C)
|
|
189
|
+
return Filtered(EquivalenceRelationPartitionWithSingletons(C),
|
|
190
|
+
x -> Size(x) > 1);
|
|
191
|
+
end);
|
|
192
|
+
|
|
193
|
+
InstallMethod(EquivalenceRelationCanonicalLookup,
|
|
194
|
+
"for a left, right, or 2-sided congruence that can compute partition",
|
|
195
|
+
[CanComputeEquivalenceRelationPartition],
|
|
196
|
+
function(C)
|
|
197
|
+
local S, lookup;
|
|
198
|
+
S := Range(C);
|
|
199
|
+
if not IsFinite(S) then
|
|
200
|
+
ErrorNoReturn("the argument (a ",
|
|
201
|
+
CongruenceHandednessString(C),
|
|
202
|
+
" congruence) must have finite range");
|
|
203
|
+
fi;
|
|
204
|
+
lookup := EquivalenceRelationLookup(C);
|
|
205
|
+
return FlatKernelOfTransformation(Transformation(lookup), Length(lookup));
|
|
206
|
+
end);
|
|
207
|
+
|
|
208
|
+
InstallMethod(NonTrivialEquivalenceClasses,
|
|
209
|
+
"for a left, right, or 2-sided congruence that can compute partition",
|
|
210
|
+
[CanComputeEquivalenceRelationPartition],
|
|
211
|
+
function(C)
|
|
212
|
+
local part, nr_classes, classes, i;
|
|
213
|
+
part := EquivalenceRelationPartition(C);
|
|
214
|
+
nr_classes := Length(part);
|
|
215
|
+
classes := EmptyPlist(nr_classes);
|
|
216
|
+
for i in [1 .. nr_classes] do
|
|
217
|
+
classes[i] := EquivalenceClassOfElementNC(C, part[i][1]);
|
|
218
|
+
SetAsList(classes[i], part[i]);
|
|
219
|
+
od;
|
|
220
|
+
return classes;
|
|
221
|
+
end);
|
|
222
|
+
|
|
223
|
+
InstallMethod(EquivalenceClasses,
|
|
224
|
+
"for left, right, or 2-sided congruence that can compute partition",
|
|
225
|
+
[CanComputeEquivalenceRelationPartition],
|
|
226
|
+
function(C)
|
|
227
|
+
local part, classes, i;
|
|
228
|
+
part := EquivalenceRelationPartitionWithSingletons(C);
|
|
229
|
+
classes := [];
|
|
230
|
+
for i in [1 .. Length(part)] do
|
|
231
|
+
classes[i] := EquivalenceClassOfElementNC(C, part[i][1]);
|
|
232
|
+
SetAsList(classes[i], part[i]);
|
|
233
|
+
od;
|
|
234
|
+
return classes;
|
|
235
|
+
end);
|
|
236
|
+
|
|
237
|
+
InstallMethod(NrEquivalenceClasses,
|
|
238
|
+
"for a left, right, or 2-sided congruence that can compute partition",
|
|
239
|
+
[CanComputeEquivalenceRelationPartition],
|
|
240
|
+
C -> Length(EquivalenceClasses(C)));
|
|
241
|
+
|
|
242
|
+
BindGlobal("_GeneratingPairsOfLeftRight2SidedCongDefault",
|
|
243
|
+
function(XCongruenceByGeneratingPairs, C)
|
|
244
|
+
local result, pairs, class, i, j;
|
|
245
|
+
|
|
246
|
+
result := XCongruenceByGeneratingPairs(Source(C), []);
|
|
247
|
+
|
|
248
|
+
for class in EquivalenceRelationPartition(C) do
|
|
249
|
+
for i in [1 .. Length(class) - 1] do
|
|
250
|
+
for j in [i + 1 .. Length(class)] do
|
|
251
|
+
if not [class[i], class[j]] in result then
|
|
252
|
+
pairs := GeneratingPairsOfLeftRightOrTwoSidedCongruence(result);
|
|
253
|
+
pairs := Concatenation(pairs, [[class[i], class[j]]]);
|
|
254
|
+
result := XCongruenceByGeneratingPairs(Source(C), pairs);
|
|
255
|
+
fi;
|
|
256
|
+
od;
|
|
257
|
+
od;
|
|
258
|
+
od;
|
|
259
|
+
return GeneratingPairsOfLeftRightOrTwoSidedCongruence(result);
|
|
260
|
+
end);
|
|
261
|
+
|
|
262
|
+
InstallMethod(GeneratingPairsOfRightMagmaCongruence,
|
|
263
|
+
"for a right congruence that can compute partition",
|
|
264
|
+
[CanComputeEquivalenceRelationPartition and IsRightMagmaCongruence],
|
|
265
|
+
function(C)
|
|
266
|
+
return _GeneratingPairsOfLeftRight2SidedCongDefault(
|
|
267
|
+
RightSemigroupCongruenceByGeneratingPairs, C);
|
|
268
|
+
end);
|
|
269
|
+
|
|
270
|
+
InstallMethod(GeneratingPairsOfLeftMagmaCongruence,
|
|
271
|
+
"for a left congruence that can compute partition",
|
|
272
|
+
[CanComputeEquivalenceRelationPartition and IsLeftMagmaCongruence],
|
|
273
|
+
function(C)
|
|
274
|
+
return _GeneratingPairsOfLeftRight2SidedCongDefault(
|
|
275
|
+
LeftSemigroupCongruenceByGeneratingPairs, C);
|
|
276
|
+
end);
|
|
277
|
+
|
|
278
|
+
InstallMethod(GeneratingPairsOfMagmaCongruence,
|
|
279
|
+
"for a congruence that can compute partition",
|
|
280
|
+
[CanComputeEquivalenceRelationPartition and IsMagmaCongruence],
|
|
281
|
+
function(C)
|
|
282
|
+
return _GeneratingPairsOfLeftRight2SidedCongDefault(
|
|
283
|
+
SemigroupCongruenceByGeneratingPairs, C);
|
|
284
|
+
end);
|
|
285
|
+
|
|
286
|
+
########################################################################
|
|
287
|
+
# Comparison operators
|
|
288
|
+
########################################################################
|
|
289
|
+
|
|
290
|
+
InstallMethod(\=,
|
|
291
|
+
"for left, right, or 2-sided congruences with known generating pairs",
|
|
292
|
+
[CanComputeEquivalenceRelationPartition and
|
|
293
|
+
HasGeneratingPairsOfLeftRightOrTwoSidedCongruence,
|
|
294
|
+
CanComputeEquivalenceRelationPartition and
|
|
295
|
+
HasGeneratingPairsOfLeftRightOrTwoSidedCongruence],
|
|
296
|
+
function(lhop, rhop)
|
|
297
|
+
local lpairs, rpairs;
|
|
298
|
+
if CongruenceHandednessString(lhop) <> CongruenceHandednessString(rhop) then
|
|
299
|
+
TryNextMethod();
|
|
300
|
+
fi;
|
|
301
|
+
|
|
302
|
+
lpairs := GeneratingPairsOfLeftRightOrTwoSidedCongruence(lhop);
|
|
303
|
+
rpairs := GeneratingPairsOfLeftRightOrTwoSidedCongruence(rhop);
|
|
304
|
+
return Range(lhop) = Range(rhop)
|
|
305
|
+
and ForAll(lpairs, x -> CongruenceTestMembershipNC(rhop, x[1], x[2]))
|
|
306
|
+
and ForAll(rpairs, x -> CongruenceTestMembershipNC(lhop, x[1], x[2]));
|
|
307
|
+
end);
|
|
308
|
+
|
|
309
|
+
InstallMethod(\=, "for a left, right, or 2-sided semigroup congruence",
|
|
310
|
+
[IsLeftRightOrTwoSidedCongruence, IsLeftRightOrTwoSidedCongruence],
|
|
311
|
+
function(lhop, rhop)
|
|
312
|
+
local S;
|
|
313
|
+
S := Range(lhop);
|
|
314
|
+
if S <> Range(rhop) then
|
|
315
|
+
return false;
|
|
316
|
+
elif HasIsFinite(S) and IsFinite(S) then
|
|
317
|
+
return EquivalenceRelationCanonicalLookup(lhop) =
|
|
318
|
+
EquivalenceRelationCanonicalLookup(rhop);
|
|
319
|
+
fi;
|
|
320
|
+
return EquivalenceRelationCanonicalPartition(lhop) =
|
|
321
|
+
EquivalenceRelationCanonicalPartition(rhop);
|
|
322
|
+
end);
|
|
323
|
+
|
|
324
|
+
# This is declared only for CanComputeEquivalenceRelationPartition because no
|
|
325
|
+
# other types of congruence have CongruenceTestMembershipNC implemented.
|
|
326
|
+
InstallMethod(\in,
|
|
327
|
+
"for pair of elements and left, right, or 2-sided congruence",
|
|
328
|
+
[IsListOrCollection, CanComputeEquivalenceRelationPartition],
|
|
329
|
+
function(pair, C)
|
|
330
|
+
local S, string;
|
|
331
|
+
|
|
332
|
+
if Size(pair) <> 2 then
|
|
333
|
+
ErrorNoReturn("the 1st argument (a list) does not have length 2");
|
|
334
|
+
fi;
|
|
335
|
+
|
|
336
|
+
S := Range(C);
|
|
337
|
+
string := CongruenceHandednessString(C);
|
|
338
|
+
if not (pair[1] in S and pair[2] in S) then
|
|
339
|
+
ErrorNoReturn("the items in the 1st argument (a list) do not all belong",
|
|
340
|
+
" to the range of the 2nd argument (a ",
|
|
341
|
+
string,
|
|
342
|
+
" semigroup congruence)");
|
|
343
|
+
elif CanEasilyCompareElements(pair[1]) and pair[1] = pair[2] then
|
|
344
|
+
return true;
|
|
345
|
+
fi;
|
|
346
|
+
return CongruenceTestMembershipNC(C, pair[1], pair[2]);
|
|
347
|
+
end);
|
|
348
|
+
|
|
349
|
+
# This is implemented only for CanComputeEquivalenceRelationPartition because
|
|
350
|
+
# no other types of congruence have CongruenceTestMembershipNC implemented.
|
|
351
|
+
InstallMethod(IsSubrelation,
|
|
352
|
+
"for left, right, or 2-sided congruences with known generating pairs",
|
|
353
|
+
[CanComputeEquivalenceRelationPartition
|
|
354
|
+
and HasGeneratingPairsOfLeftRightOrTwoSidedCongruence,
|
|
355
|
+
CanComputeEquivalenceRelationPartition
|
|
356
|
+
and HasGeneratingPairsOfLeftRightOrTwoSidedCongruence],
|
|
357
|
+
function(lhop, rhop)
|
|
358
|
+
# Only valid for certain combinations of types
|
|
359
|
+
if CongruenceHandednessString(lhop) <> CongruenceHandednessString(rhop)
|
|
360
|
+
and not IsMagmaCongruence(lhop) then
|
|
361
|
+
TryNextMethod();
|
|
362
|
+
fi;
|
|
363
|
+
|
|
364
|
+
# We use CongruenceTestMembershipNC instead of \in because using \in causes a
|
|
365
|
+
# 33% slow down in tst/standard/congruences/conglatt.tst
|
|
366
|
+
return Range(lhop) = Range(rhop)
|
|
367
|
+
and ForAll(GeneratingPairsOfLeftRightOrTwoSidedCongruence(rhop),
|
|
368
|
+
x -> CongruenceTestMembershipNC(lhop, x[1], x[2]));
|
|
369
|
+
end);
|
|
370
|
+
|
|
371
|
+
############################################################################
|
|
372
|
+
# Operators
|
|
373
|
+
############################################################################
|
|
374
|
+
|
|
375
|
+
BindGlobal("_MeetXCongruences",
|
|
376
|
+
function(XCongruenceByGeneratingPairs, GeneratingPairsOfXCongruence, lhop, rhop)
|
|
377
|
+
local result, lhop_nr_pairs, rhop_nr_pairs, cong1, cong2, pairs, class, i, j;
|
|
378
|
+
|
|
379
|
+
if Range(lhop) <> Range(rhop) then
|
|
380
|
+
Error("cannot form the meet of congruences over different semigroups");
|
|
381
|
+
elif lhop = rhop then
|
|
382
|
+
return lhop;
|
|
383
|
+
elif IsSubrelation(lhop, rhop) then
|
|
384
|
+
return rhop;
|
|
385
|
+
elif IsSubrelation(rhop, lhop) then
|
|
386
|
+
return lhop;
|
|
387
|
+
fi;
|
|
388
|
+
result := XCongruenceByGeneratingPairs(Source(lhop), []);
|
|
389
|
+
|
|
390
|
+
lhop_nr_pairs := Sum(EquivalenceRelationPartition(lhop),
|
|
391
|
+
x -> Binomial(Size(x), 2));
|
|
392
|
+
rhop_nr_pairs := Sum(EquivalenceRelationPartition(rhop),
|
|
393
|
+
x -> Binomial(Size(x), 2));
|
|
394
|
+
|
|
395
|
+
if lhop_nr_pairs < rhop_nr_pairs then
|
|
396
|
+
cong1 := lhop;
|
|
397
|
+
cong2 := rhop;
|
|
398
|
+
else
|
|
399
|
+
cong1 := rhop;
|
|
400
|
+
cong2 := lhop;
|
|
401
|
+
fi;
|
|
402
|
+
|
|
403
|
+
for class in EquivalenceRelationPartition(cong1) do
|
|
404
|
+
for i in [1 .. Length(class) - 1] do
|
|
405
|
+
for j in [i + 1 .. Length(class)] do
|
|
406
|
+
if [class[i], class[j]] in cong2
|
|
407
|
+
and not [class[i], class[j]] in result then
|
|
408
|
+
pairs := GeneratingPairsOfXCongruence(result);
|
|
409
|
+
pairs := Concatenation(pairs, [[class[i], class[j]]]);
|
|
410
|
+
result := XCongruenceByGeneratingPairs(Source(cong1), pairs);
|
|
411
|
+
fi;
|
|
412
|
+
od;
|
|
413
|
+
od;
|
|
414
|
+
od;
|
|
415
|
+
return result;
|
|
416
|
+
end);
|
|
417
|
+
|
|
418
|
+
InstallMethod(MeetLeftSemigroupCongruences,
|
|
419
|
+
"for semigroup congruences that can compute partition",
|
|
420
|
+
[CanComputeEquivalenceRelationPartition and IsLeftSemigroupCongruence,
|
|
421
|
+
CanComputeEquivalenceRelationPartition and IsLeftSemigroupCongruence],
|
|
422
|
+
function(lhop, rhop)
|
|
423
|
+
return _MeetXCongruences(LeftSemigroupCongruenceByGeneratingPairs,
|
|
424
|
+
GeneratingPairsOfLeftMagmaCongruence,
|
|
425
|
+
lhop,
|
|
426
|
+
rhop);
|
|
427
|
+
end);
|
|
428
|
+
|
|
429
|
+
InstallMethod(MeetRightSemigroupCongruences,
|
|
430
|
+
"for semigroup congruences that can compute partition",
|
|
431
|
+
[CanComputeEquivalenceRelationPartition and IsRightSemigroupCongruence,
|
|
432
|
+
CanComputeEquivalenceRelationPartition and IsRightSemigroupCongruence],
|
|
433
|
+
function(lhop, rhop)
|
|
434
|
+
return _MeetXCongruences(RightSemigroupCongruenceByGeneratingPairs,
|
|
435
|
+
GeneratingPairsOfRightMagmaCongruence,
|
|
436
|
+
lhop,
|
|
437
|
+
rhop);
|
|
438
|
+
end);
|
|
439
|
+
|
|
440
|
+
InstallMethod(MeetSemigroupCongruences,
|
|
441
|
+
"for semigroup congruences that can compute partition",
|
|
442
|
+
[CanComputeEquivalenceRelationPartition and IsSemigroupCongruence,
|
|
443
|
+
CanComputeEquivalenceRelationPartition and IsSemigroupCongruence],
|
|
444
|
+
function(lhop, rhop)
|
|
445
|
+
return _MeetXCongruences(SemigroupCongruenceByGeneratingPairs,
|
|
446
|
+
GeneratingPairsOfSemigroupCongruence,
|
|
447
|
+
lhop,
|
|
448
|
+
rhop);
|
|
449
|
+
end);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
############################################################################
|
|
2
|
+
##
|
|
3
|
+
## congruences/congrees.gd
|
|
4
|
+
## Copyright (C) 2015-2022 Michael C. Young
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
## This file contains methods for Rees congruences; i.e. semigroup congruences
|
|
11
|
+
## defined by a two-sided ideal. See Howie 1.7
|
|
12
|
+
##
|
|
13
|
+
|
|
14
|
+
DeclareAttribute("SemigroupIdealOfReesCongruence", IsReesCongruence);
|
|
15
|
+
|
|
16
|
+
DeclareCategory("IsReesCongruenceClass",
|
|
17
|
+
IsCongruenceClass and IsAttributeStoringRep and
|
|
18
|
+
IsMultiplicativeElement);
|
|
19
|
+
|
|
20
|
+
DeclareProperty("IsReesCongruence", IsLeftRightOrTwoSidedCongruence);
|