passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-manylinux_2_24_aarch64.manylinux_2_28_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-gnu-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1016 -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.libs/libsemigroups-8ea3c4e7.so.2.0.0 +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,1011 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
#W standard/congruences/congpairs.tst
|
|
4
|
+
#Y Copyright (C) 2014-2022 Wilf A. Wilson
|
|
5
|
+
## Michael Young
|
|
6
|
+
##
|
|
7
|
+
## Licensing information can be found in the README file of this package.
|
|
8
|
+
##
|
|
9
|
+
#############################################################################
|
|
10
|
+
##
|
|
11
|
+
|
|
12
|
+
#@local C, F, M, S, T, ccong, class, class1, class2, classes, cong, cong1
|
|
13
|
+
#@local cong2, cong3, enum, gens, lcong, pair, pair1, pair2, pairs, pairs1
|
|
14
|
+
#@local pairs2, part, part1, rels, sgens, u, v, x
|
|
15
|
+
gap> START_TEST("Semigroups package: standard/congruences/congpairs.tst");
|
|
16
|
+
gap> LoadPackage("semigroups", false);;
|
|
17
|
+
|
|
18
|
+
# Set info levels and user preferences
|
|
19
|
+
gap> SEMIGROUPS.StartTest();
|
|
20
|
+
|
|
21
|
+
# PairsCongTest2: Checking robustness against infinite semigroups
|
|
22
|
+
gap> S := FreeSemigroup(1);
|
|
23
|
+
<free semigroup on the generators [ s1 ]>
|
|
24
|
+
gap> x := GeneratorsOfSemigroup(S)[1];
|
|
25
|
+
s1
|
|
26
|
+
gap> gens := [x ^ 2, x ^ 4];
|
|
27
|
+
[ s1^2, s1^4 ]
|
|
28
|
+
gap> cong := SemigroupCongruence(S, gens);
|
|
29
|
+
<2-sided semigroup congruence over <free semigroup on the generators
|
|
30
|
+
[ s1 ]> with 1 generating pairs>
|
|
31
|
+
|
|
32
|
+
# The next test is now valid (but would run forever)
|
|
33
|
+
#gap> NonTrivialEquivalenceClasses(cong);
|
|
34
|
+
#Error, no method found! For debugging hints type ?Recovery from NoMethodFound
|
|
35
|
+
#Error, no 2nd choice method found for `NonTrivialEquivalenceClasses' on 1 argu\
|
|
36
|
+
#ments
|
|
37
|
+
gap> gens in cong;
|
|
38
|
+
true
|
|
39
|
+
gap> EquivalenceRelationLookup(cong);
|
|
40
|
+
Error, the argument (a 2-sided congruence) must have finite range
|
|
41
|
+
gap> NrEquivalenceClasses(cong);
|
|
42
|
+
3
|
|
43
|
+
gap> class := EquivalenceClassOfElement(cong, x);;
|
|
44
|
+
gap> cong2 := SemigroupCongruence(S, [x ^ 2, x ^ 2]);;
|
|
45
|
+
gap> class := EquivalenceClassOfElement(cong2, x);;
|
|
46
|
+
gap> enum := Enumerator(class);
|
|
47
|
+
[ s1 ]
|
|
48
|
+
gap> Size(class);
|
|
49
|
+
1
|
|
50
|
+
gap> x ^ 2 in class;
|
|
51
|
+
false
|
|
52
|
+
gap> ImagesElm(cong2, x ^ 5);
|
|
53
|
+
[ s1^5 ]
|
|
54
|
+
|
|
55
|
+
# PairsCongTest3: \= for two semigroup congruences
|
|
56
|
+
gap> gens := [Transformation([2, 6, 7, 2, 6, 9, 9, 1, 1, 5])];;
|
|
57
|
+
gap> S := Semigroup(Transformation([1]));;
|
|
58
|
+
gap> T := Monoid(gens);;
|
|
59
|
+
gap> u := UniversalSemigroupCongruence(S);
|
|
60
|
+
<universal semigroup congruence over <trivial transformation group of
|
|
61
|
+
degree 0 with 1 generator>>
|
|
62
|
+
gap> v := SemigroupCongruence(T, [gens[1], gens[1]]);;
|
|
63
|
+
gap> Size(GeneratingPairsOfSemigroupCongruence(v));
|
|
64
|
+
0
|
|
65
|
+
gap> NrEquivalenceClasses(v);
|
|
66
|
+
6
|
|
67
|
+
gap> Size(T);
|
|
68
|
+
6
|
|
69
|
+
gap> u = v;
|
|
70
|
+
false
|
|
71
|
+
gap> u := UniversalSemigroupCongruence(T);
|
|
72
|
+
<universal semigroup congruence over <commutative non-regular transformation
|
|
73
|
+
monoid of size 6, degree 10 with 1 generator>>
|
|
74
|
+
gap> u = v;
|
|
75
|
+
false
|
|
76
|
+
gap> gens := List(T, x -> [gens[1], x]);;
|
|
77
|
+
gap> v := SemigroupCongruence(T, gens);
|
|
78
|
+
<2-sided semigroup congruence over <commutative non-regular transformation
|
|
79
|
+
monoid of size 6, degree 10 with 1 generator> with 5 generating pairs>
|
|
80
|
+
gap> u = v;
|
|
81
|
+
true
|
|
82
|
+
gap> NrEquivalenceClasses(u);
|
|
83
|
+
1
|
|
84
|
+
|
|
85
|
+
# PairsCongTest4: \* for two semigroup congruence classes
|
|
86
|
+
gap> gens := [Transformation([2, 6, 7, 2, 6, 9, 9, 1, 1, 5])];;
|
|
87
|
+
gap> S := Semigroup(gens);;
|
|
88
|
+
gap> gens := List(S, x -> [gens[1], x]);;
|
|
89
|
+
gap> u := SemigroupCongruence(S, gens);; # universal congruence
|
|
90
|
+
gap> HasGeneratingPairsOfMagmaCongruence(u);
|
|
91
|
+
true
|
|
92
|
+
gap> Size(GeneratingPairsOfSemigroupCongruence(u));
|
|
93
|
+
4
|
|
94
|
+
gap> u = UniversalSemigroupCongruence(S);
|
|
95
|
+
true
|
|
96
|
+
gap> v := SemigroupCongruence(S, [gens[1], gens[1]]);; # trivial congruence
|
|
97
|
+
gap> HasGeneratingPairsOfMagmaCongruence(v);
|
|
98
|
+
true
|
|
99
|
+
gap> Size(GeneratingPairsOfSemigroupCongruence(v));
|
|
100
|
+
0
|
|
101
|
+
gap> classes := Set(EquivalenceClasses(v));
|
|
102
|
+
[ <2-sided congruence class of Transformation( [ 2, 6, 7, 2, 6, 9, 9, 1, 1,
|
|
103
|
+
5 ] )>, <2-sided congruence class of Transformation( [ 6, 9, 9, 6, 9, 1,
|
|
104
|
+
1, 2, 2, 6 ] )>, <2-sided congruence class of Transformation( [ 9, 1, 1,
|
|
105
|
+
9, 1, 2, 2, 6, 6, 9 ] )>,
|
|
106
|
+
<2-sided congruence class of Transformation( [ 1, 2, 2, 1, 2, 6, 6, 9, 9,
|
|
107
|
+
1 ] )>, <2-sided congruence class of Transformation( [ 2, 6, 6, 2, 6, 9,
|
|
108
|
+
9, 1, 1, 2 ] )> ]
|
|
109
|
+
gap> EquivalenceClasses(u)[1] in classes;
|
|
110
|
+
false
|
|
111
|
+
gap> classes[1] * EquivalenceClasses(u)[1];
|
|
112
|
+
Error, the arguments (cong. classes) are not classes of the same congruence
|
|
113
|
+
gap> EquivalenceClasses(u)[1] * classes[1];
|
|
114
|
+
Error, the arguments (cong. classes) are not classes of the same congruence
|
|
115
|
+
gap> classes[3] * classes[4];
|
|
116
|
+
<2-sided congruence class of Transformation( [ 9, 1, 1, 9, 1, 2, 2, 6, 6,
|
|
117
|
+
9 ] )>
|
|
118
|
+
gap> classes[4] * classes[3];
|
|
119
|
+
<2-sided congruence class of Transformation( [ 9, 1, 1, 9, 1, 2, 2, 6, 6,
|
|
120
|
+
9 ] )>
|
|
121
|
+
gap> EquivalenceClassOfElement(v, Representative(classes[5] * classes[2])) =
|
|
122
|
+
> EquivalenceClassOfElement(v,
|
|
123
|
+
> Representative(classes[5]) *
|
|
124
|
+
> Representative(classes[2]));
|
|
125
|
+
true
|
|
126
|
+
gap> classes[3] = classes[3];
|
|
127
|
+
true
|
|
128
|
+
gap> classes[2] = classes[3];
|
|
129
|
+
false
|
|
130
|
+
gap> AsList(classes[4]);
|
|
131
|
+
[ Transformation( [ 1, 2, 2, 1, 2, 6, 6, 9, 9, 1 ] ) ]
|
|
132
|
+
gap> Size(classes[4]);
|
|
133
|
+
1
|
|
134
|
+
|
|
135
|
+
# A semigroup congruence example
|
|
136
|
+
gap> S := Semigroup([Transformation([2, 1, 1, 2, 1]),
|
|
137
|
+
> Transformation([3, 4, 3, 4, 3]),
|
|
138
|
+
> Transformation([4, 3, 3, 4, 4]),
|
|
139
|
+
> Transformation([1, 3, 4, 1, 3])]);;
|
|
140
|
+
gap> pair1 := [Transformation([3, 4, 3, 4, 3]),
|
|
141
|
+
> Transformation([1, 2, 1, 2, 1])];;
|
|
142
|
+
gap> pair2 := [Transformation([4, 3, 4, 3, 4]),
|
|
143
|
+
> Transformation([3, 4, 3, 4, 3])];;
|
|
144
|
+
gap> cong := SemigroupCongruence(S, pair1, pair2);;
|
|
145
|
+
gap> Print(cong); Print("\n");
|
|
146
|
+
SemigroupCongruence( Semigroup( [ Transformation( [ 2, 1, 1, 2, 1 ] ),
|
|
147
|
+
Transformation( [ 3, 4, 3, 4, 3 ] ), Transformation( [ 4, 3, 3, 4, 4 ] ),
|
|
148
|
+
Transformation( [ 1, 3, 4, 1, 3 ] ) ] ),
|
|
149
|
+
[ [ Transformation( [ 3, 4, 3, 4, 3 ] ), Transformation( [ 1, 2, 1, 2, 1 ] ) ]
|
|
150
|
+
,
|
|
151
|
+
[ Transformation( [ 4, 3, 4, 3, 4 ] ), Transformation( [ 3, 4, 3, 4, 3 ] )
|
|
152
|
+
] ] )
|
|
153
|
+
gap> [Transformation([4, 4, 3, 4, 4]), Transformation([3, 3, 1, 3, 3])] in cong;
|
|
154
|
+
true
|
|
155
|
+
gap> [Transformation([4, 4, 3, 4, 4]), Transformation([3, 3, 1, 3, 3])] in cong;
|
|
156
|
+
true
|
|
157
|
+
gap> [Transformation([3, 4, 3, 3, 4]), Transformation([1, 3, 4, 1, 3])] in cong;
|
|
158
|
+
false
|
|
159
|
+
gap> [Transformation([3, 4, 3, 3, 4]), Transformation([1, 3, 4, 1, 3])] in cong;
|
|
160
|
+
false
|
|
161
|
+
gap> EquivalenceRelationCanonicalLookup(cong);
|
|
162
|
+
[ 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
163
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
|
|
164
|
+
gap> NonTrivialEquivalenceClasses(cong);
|
|
165
|
+
[ <2-sided congruence class of Transformation( [ 2, 1, 1, 2, 1 ] )> ]
|
|
166
|
+
gap> classes := EquivalenceClasses(cong);
|
|
167
|
+
[ <2-sided congruence class of Transformation( [ 2, 1, 1, 2, 1 ] )>,
|
|
168
|
+
<2-sided congruence class of Transformation( [ 1, 3, 4, 1, 3 ] )> ]
|
|
169
|
+
gap> ImagesElm(cong, Transformation([1, 3, 4, 1, 3]));
|
|
170
|
+
[ Transformation( [ 1, 3, 4, 1, 3 ] ) ]
|
|
171
|
+
gap> cong = JoinSemigroupCongruences(cong, cong);
|
|
172
|
+
true
|
|
173
|
+
gap> T := Semigroup([Transformation([2, 1, 1, 2, 1]),
|
|
174
|
+
> Transformation([3, 4, 3, 4, 3]),
|
|
175
|
+
> Transformation([4, 3, 3, 4, 4]),
|
|
176
|
+
> Transformation([2, 3, 2, 2, 3, 1]),
|
|
177
|
+
> Transformation([1, 3, 4, 1, 3])]);;
|
|
178
|
+
gap> cong2 := SemigroupCongruence(T, pair1, pair2);;
|
|
179
|
+
gap> EquivalenceClassOfElement(cong, Transformation([2, 3, 2, 2, 3, 1]));
|
|
180
|
+
Error, the 2nd argument (a mult. elt.) does not belong to the range of the 1st\
|
|
181
|
+
argument (a 2-sided congruence)
|
|
182
|
+
gap> JoinSemigroupCongruences(cong, cong2);
|
|
183
|
+
Error, cannot form the join of congruences over different semigroups
|
|
184
|
+
gap> IsSubrelation(cong, cong2);
|
|
185
|
+
false
|
|
186
|
+
gap> cong := LeftSemigroupCongruence(S, pair1, pair2);;
|
|
187
|
+
gap> IsSubrelation(cong2, cong);
|
|
188
|
+
false
|
|
189
|
+
gap> cong := RightSemigroupCongruence(S, pair1, pair2);;
|
|
190
|
+
gap> IsSubrelation(cong2, cong);
|
|
191
|
+
false
|
|
192
|
+
|
|
193
|
+
# A left semigroup congruence example that is also right
|
|
194
|
+
gap> S := Semigroup(Transformation([2, 1, 1, 2, 1]),
|
|
195
|
+
> Transformation([3, 4, 3, 4, 4]),
|
|
196
|
+
> Transformation([3, 4, 3, 4, 3]),
|
|
197
|
+
> Transformation([4, 3, 3, 4, 4]));;
|
|
198
|
+
gap> pair1 := [Transformation([3, 4, 3, 4, 3]),
|
|
199
|
+
> Transformation([1, 2, 1, 2, 1])];;
|
|
200
|
+
gap> pair2 := [Transformation([4, 3, 4, 3, 4]),
|
|
201
|
+
> Transformation([3, 4, 3, 4, 3])];;
|
|
202
|
+
gap> cong := LeftSemigroupCongruence(S, pair1, pair2);
|
|
203
|
+
<left semigroup congruence over <transformation semigroup of degree 5 with 4
|
|
204
|
+
generators> with 2 generating pairs>
|
|
205
|
+
gap> JoinLeftSemigroupCongruences(cong, cong) = cong;
|
|
206
|
+
true
|
|
207
|
+
gap> [Transformation([3, 4, 4, 3, 3]), Transformation([1, 2, 2, 1, 1])] in cong;
|
|
208
|
+
true
|
|
209
|
+
gap> [Transformation([3, 4, 4, 3, 3]), Transformation([1, 2, 2, 1, 1])] in cong;
|
|
210
|
+
true
|
|
211
|
+
gap> [Transformation([1, 2, 1, 2, 2]), Transformation([1, 2, 2, 1, 2])] in cong;
|
|
212
|
+
false
|
|
213
|
+
gap> EquivalenceRelationCanonicalLookup(cong);
|
|
214
|
+
[ 1, 2, 3, 4, 1, 1, 1, 2, 3, 4, 2, 2, 3, 3, 4, 4 ]
|
|
215
|
+
gap> NonTrivialEquivalenceClasses(cong);
|
|
216
|
+
[ <left congruence class of Transformation( [ 2, 1, 1, 2, 1 ] )>,
|
|
217
|
+
<left congruence class of Transformation( [ 3, 4, 3, 4, 4 ] )>,
|
|
218
|
+
<left congruence class of Transformation( [ 3, 4, 3, 4, 3 ] )>,
|
|
219
|
+
<left congruence class of Transformation( [ 4, 3, 3, 4, 4 ] )> ]
|
|
220
|
+
gap> EquivalenceClasses(cong);
|
|
221
|
+
[ <left congruence class of Transformation( [ 2, 1, 1, 2, 1 ] )>,
|
|
222
|
+
<left congruence class of Transformation( [ 3, 4, 3, 4, 4 ] )>,
|
|
223
|
+
<left congruence class of Transformation( [ 3, 4, 3, 4, 3 ] )>,
|
|
224
|
+
<left congruence class of Transformation( [ 4, 3, 3, 4, 4 ] )> ]
|
|
225
|
+
gap> IsRightSemigroupCongruence(cong);
|
|
226
|
+
true
|
|
227
|
+
|
|
228
|
+
# A left semigroup congruence example that is not right
|
|
229
|
+
gap> S := Semigroup([Transformation([1, 3, 4, 1, 3, 7, 5]),
|
|
230
|
+
> Transformation([5, 7, 1, 6, 1, 7, 6])]);;
|
|
231
|
+
gap> pair := [Transformation([1, 1, 1, 1, 1, 4, 1]),
|
|
232
|
+
> Transformation([1, 6, 5, 7, 5, 6, 7])];;
|
|
233
|
+
gap> cong := LeftSemigroupCongruence(S, pair);;
|
|
234
|
+
gap> Print(cong); Print("\n");
|
|
235
|
+
LeftSemigroupCongruence( Semigroup(
|
|
236
|
+
[ Transformation( [ 1, 3, 4, 1, 3, 7, 5 ] ),
|
|
237
|
+
Transformation( [ 5, 7, 1, 6, 1, 7, 6 ] ) ] ),
|
|
238
|
+
[
|
|
239
|
+
[ Transformation( [ 1, 1, 1, 1, 1, 4, 1 ] ),
|
|
240
|
+
Transformation( [ 1, 6, 5, 7, 5, 6, 7 ] ) ] ] )
|
|
241
|
+
gap> [Transformation([7, 1, 7, 7, 1, 5, 5]),
|
|
242
|
+
> Transformation([1, 7, 1, 1, 7, 1, 1])] in cong;
|
|
243
|
+
true
|
|
244
|
+
gap> IsSemigroupCongruence(cong);
|
|
245
|
+
false
|
|
246
|
+
gap> IsRightSemigroupCongruence(cong);
|
|
247
|
+
false
|
|
248
|
+
|
|
249
|
+
# A right semigroup congruence example that is left
|
|
250
|
+
gap> S := Semigroup([Transformation([2, 3, 5, 1, 4, 6, 1]),
|
|
251
|
+
> Transformation([2, 6, 4, 2, 6, 1, 2])]);;
|
|
252
|
+
gap> pairs := [[Transformation([6, 1, 2, 6, 1, 2, 6]),
|
|
253
|
+
> Transformation([5, 4, 1, 3, 2, 6, 3])],
|
|
254
|
+
> [Transformation([2, 3, 5, 1, 4, 6, 1]),
|
|
255
|
+
> Transformation([5, 6, 2, 5, 6, 3, 5])]];;
|
|
256
|
+
gap> cong := RightSemigroupCongruence(S, pairs);;
|
|
257
|
+
gap> JoinRightSemigroupCongruences(cong, cong) = cong;
|
|
258
|
+
true
|
|
259
|
+
gap> [Transformation([2, 6, 4, 2, 6, 1, 2]),
|
|
260
|
+
> Transformation([6, 2, 6, 5, 5, 3, 5])] in cong;
|
|
261
|
+
true
|
|
262
|
+
gap> IsSemigroupCongruence(cong);
|
|
263
|
+
true
|
|
264
|
+
gap> IsLeftSemigroupCongruence(cong);
|
|
265
|
+
true
|
|
266
|
+
|
|
267
|
+
# A right semigroup congruence example that is not left
|
|
268
|
+
gap> S := Semigroup(Transformation([2, 1, 1, 2, 1]),
|
|
269
|
+
> Transformation([3, 4, 3, 4, 4]),
|
|
270
|
+
> Transformation([3, 4, 3, 4, 3]),
|
|
271
|
+
> Transformation([4, 3, 3, 4, 4]));;
|
|
272
|
+
gap> pair1 := [Transformation([3, 4, 3, 4, 3]),
|
|
273
|
+
> Transformation([1, 2, 1, 2, 1])];;
|
|
274
|
+
gap> pair2 := [Transformation([4, 3, 4, 3, 4]),
|
|
275
|
+
> Transformation([3, 4, 3, 4, 3])];;
|
|
276
|
+
gap> cong := RightSemigroupCongruence(S, pair1, pair2);
|
|
277
|
+
<right semigroup congruence over <transformation semigroup of degree 5 with 4
|
|
278
|
+
generators> with 2 generating pairs>
|
|
279
|
+
gap> Print(cong); Print("\n");
|
|
280
|
+
RightSemigroupCongruence( Semigroup( [ Transformation( [ 2, 1, 1, 2, 1 ] ),
|
|
281
|
+
Transformation( [ 3, 4, 3, 4, 4 ] ), Transformation( [ 3, 4, 3, 4, 3 ] ),
|
|
282
|
+
Transformation( [ 4, 3, 3, 4, 4 ] ) ] ),
|
|
283
|
+
[ [ Transformation( [ 3, 4, 3, 4, 3 ] ), Transformation( [ 1, 2, 1, 2, 1 ] ) ]
|
|
284
|
+
,
|
|
285
|
+
[ Transformation( [ 4, 3, 4, 3, 4 ] ), Transformation( [ 3, 4, 3, 4, 3 ] )
|
|
286
|
+
] ] )
|
|
287
|
+
gap> [Transformation([3, 4, 3, 4, 3]), Transformation([1, 2, 1, 2, 1])] in cong;
|
|
288
|
+
true
|
|
289
|
+
gap> [Transformation([3, 4, 3, 4, 3]), Transformation([1, 2, 1, 2, 1])] in cong;
|
|
290
|
+
true
|
|
291
|
+
gap> [Transformation([3, 4, 4, 3, 3]), Transformation([1, 2, 2, 1, 1])] in cong;
|
|
292
|
+
false
|
|
293
|
+
gap> [Transformation([3, 4, 4, 3, 3]), Transformation([1, 2, 2, 1, 1])] in cong;
|
|
294
|
+
false
|
|
295
|
+
gap> EquivalenceRelationCanonicalLookup(cong);
|
|
296
|
+
[ 1, 2, 3, 4, 5, 6, 7, 8, 3, 9, 10, 11, 3, 3, 12, 13 ]
|
|
297
|
+
gap> NonTrivialEquivalenceClasses(cong);
|
|
298
|
+
[ <right congruence class of Transformation( [ 3, 4, 3, 4, 3 ] )> ]
|
|
299
|
+
gap> IsLeftSemigroupCongruence(cong);
|
|
300
|
+
false
|
|
301
|
+
gap> lcong := LeftSemigroupCongruence(S, pair1, pair2);;
|
|
302
|
+
gap> IsSubrelation(lcong, cong);
|
|
303
|
+
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
|
|
304
|
+
Error, no 2nd choice method found for `IsSubrelation' on 2 arguments
|
|
305
|
+
|
|
306
|
+
# \in: Bad input
|
|
307
|
+
gap> S := Semigroup(Transformation([2, 1, 1, 2, 1]),
|
|
308
|
+
> Transformation([2, 4, 2, 3, 5]),
|
|
309
|
+
> Transformation([3, 4, 3, 4, 3]),
|
|
310
|
+
> Transformation([4, 3, 3, 4, 4]));;
|
|
311
|
+
gap> pair1 := [Transformation([3, 4, 3, 4, 3]),
|
|
312
|
+
> Transformation([1, 2, 1, 2, 1])];;
|
|
313
|
+
gap> cong := SemigroupCongruence(S, pair1);;
|
|
314
|
+
gap> [Transformation([2, 1, 1, 2, 1])] in cong;
|
|
315
|
+
Error, the 1st argument (a list) does not have length 2
|
|
316
|
+
gap> [Transformation([2, 1, 1, 2, 1]), Transformation([5, 2, 1, 2, 2])] in cong;
|
|
317
|
+
Error, the items in the 1st argument (a list) do not all belong to the range o\
|
|
318
|
+
f the 2nd argument (a 2-sided semigroup congruence)
|
|
319
|
+
|
|
320
|
+
# Classes
|
|
321
|
+
gap> S := Semigroup([
|
|
322
|
+
> Transformation([1, 5, 4, 2, 1]), Transformation([2, 1, 1, 1, 3])]);;
|
|
323
|
+
gap> pair := [Transformation([2, 2, 2, 3, 2]),
|
|
324
|
+
> Transformation([2, 2, 1, 1, 2])];;
|
|
325
|
+
gap> cong := SemigroupCongruence(S, pair);;
|
|
326
|
+
gap> class := EquivalenceClassOfElement(cong, Transformation([1, 2, 2, 2, 1]));;
|
|
327
|
+
gap> enum := Enumerator(class);;
|
|
328
|
+
gap> Transformation([1, 2, 2, 2, 1]) in enum;
|
|
329
|
+
true
|
|
330
|
+
gap> Transformation([2, 2, 3, 2, 2]) in enum;
|
|
331
|
+
true
|
|
332
|
+
gap> Transformation([1, 5, 4, 2, 1]) in enum;
|
|
333
|
+
false
|
|
334
|
+
gap> enum[3] in class;
|
|
335
|
+
true
|
|
336
|
+
gap> Transformation([1, 5, 4, 2, 1]) in class;
|
|
337
|
+
false
|
|
338
|
+
gap> Transformation([1, 2, 2, 2, 1]) in class;
|
|
339
|
+
true
|
|
340
|
+
gap> Transformation([2, 2, 3, 2, 2]) in class;
|
|
341
|
+
true
|
|
342
|
+
gap> enum[2000];
|
|
343
|
+
Error, List Element: <list>[2000] must have an assigned value
|
|
344
|
+
gap> cong := SemigroupCongruence(S, pair);;
|
|
345
|
+
gap> class := EquivalenceClassOfElement(cong, Transformation([1, 2, 2, 2, 1]));;
|
|
346
|
+
gap> enum := Enumerator(class);;
|
|
347
|
+
gap> x := enum[1];;
|
|
348
|
+
gap> EquivalenceRelationCanonicalLookup(cong);;
|
|
349
|
+
gap> Position(enum, Transformation([2, 2, 2, 2, 3]));
|
|
350
|
+
25
|
|
351
|
+
gap> Position(enum, x);
|
|
352
|
+
1
|
|
353
|
+
gap> cong := SemigroupCongruence(S, pair);;
|
|
354
|
+
gap> class := EquivalenceClassOfElement(cong, Transformation([1, 2, 2, 2, 1]));;
|
|
355
|
+
gap> Transformation([1, 1, 5, 1, 1]) in class;
|
|
356
|
+
true
|
|
357
|
+
gap> Transformation([6, 2, 3, 4, 1, 1]) in class;
|
|
358
|
+
false
|
|
359
|
+
gap> Size(class);
|
|
360
|
+
89
|
|
361
|
+
|
|
362
|
+
# Test multithreading in TC
|
|
363
|
+
gap> S := DirectProduct(
|
|
364
|
+
> FullTransformationMonoid(6), Semigroup(Transformation([2, 1])));
|
|
365
|
+
<transformation monoid of degree 8 with 4 generators>
|
|
366
|
+
gap> pairs := [[Transformation([1, 1, 1, 1, 1, 1, 8, 7]), Transformation([1, 1,
|
|
367
|
+
> 1, 1, 1, 1])],
|
|
368
|
+
> [Transformation([1, 1, 1, 1, 1, 1]), Transformation([2, 2, 2, 2, 2, 2])],
|
|
369
|
+
> [Transformation([1, 1, 1, 1, 1, 1]), Transformation([3, 3, 3, 3, 3, 3])],
|
|
370
|
+
> [Transformation([1, 1, 1, 1, 1, 1]), Transformation([4, 4, 4, 4, 4, 4])],
|
|
371
|
+
> [Transformation([1, 1, 1, 1, 1, 1]), Transformation([5, 5, 5, 5, 5, 5])],
|
|
372
|
+
> [Transformation([1, 1, 1, 1, 1, 1]), Transformation([6, 6, 6, 6, 6, 6])],
|
|
373
|
+
> [Transformation([1, 1, 1, 1, 1, 1, 8, 7]), Transformation([1, 2, 3, 4, 5, 6,
|
|
374
|
+
> 8, 7])]];;
|
|
375
|
+
gap> cong2 := RightSemigroupCongruence(S, pairs);;
|
|
376
|
+
gap> NrEquivalenceClasses(cong2);
|
|
377
|
+
1
|
|
378
|
+
|
|
379
|
+
# Test multithreading in TC
|
|
380
|
+
gap> S := DirectProduct(FullTransformationMonoid(6),
|
|
381
|
+
> Semigroup(Transformation([2, 1])));;
|
|
382
|
+
gap> pair1 := [Transformation([1, 2, 3, 4, 5, 6, 8, 7]),
|
|
383
|
+
> IdentityTransformation];;
|
|
384
|
+
gap> cong1 := RightSemigroupCongruence(S, pair1);;
|
|
385
|
+
gap> NrEquivalenceClasses(cong1);
|
|
386
|
+
46656
|
|
387
|
+
|
|
388
|
+
# Test duplicate generators of semigroup
|
|
389
|
+
gap> S := Semigroup(Matrix(IsBooleanMat, [[0, 1], [1, 0]]),
|
|
390
|
+
> Matrix(IsBooleanMat, [[1, 0], [1, 1]]),
|
|
391
|
+
> Matrix(IsBooleanMat, [[1, 0], [0, 0]]),
|
|
392
|
+
> Matrix(IsBooleanMat, [[1, 0], [0, 0]]));;
|
|
393
|
+
gap> cong := LeftSemigroupCongruence(S, [S.1, S.2]);;
|
|
394
|
+
gap> NrEquivalenceClasses(cong);
|
|
395
|
+
4
|
|
396
|
+
gap> cong := RightSemigroupCongruence(S, [S.1, S.2]);;
|
|
397
|
+
gap> NrEquivalenceClasses(cong);
|
|
398
|
+
4
|
|
399
|
+
gap> cong := SemigroupCongruence(S, [S.1, S.2]);;
|
|
400
|
+
gap> NrEquivalenceClasses(cong);
|
|
401
|
+
1
|
|
402
|
+
gap> S := Semigroup(Matrix(IsBooleanMat, [[0, 1], [1, 0]]),
|
|
403
|
+
> Matrix(IsBooleanMat, [[1, 0], [1, 1]]),
|
|
404
|
+
> Matrix(IsBooleanMat, [[1, 0], [0, 0]]));;
|
|
405
|
+
gap> cong := LeftSemigroupCongruence(S, [S.1, S.2]);;
|
|
406
|
+
gap> NrEquivalenceClasses(cong);
|
|
407
|
+
4
|
|
408
|
+
gap> cong := RightSemigroupCongruence(S, [S.1, S.2]);;
|
|
409
|
+
gap> NrEquivalenceClasses(cong);
|
|
410
|
+
4
|
|
411
|
+
gap> cong := SemigroupCongruence(S, [S.1, S.2]);;
|
|
412
|
+
gap> NrEquivalenceClasses(cong);
|
|
413
|
+
1
|
|
414
|
+
|
|
415
|
+
# Test duplicate generators of semigroup as generating pairs
|
|
416
|
+
gap> S := Semigroup(Matrix(IsBooleanMat, [[0, 1], [1, 0]]),
|
|
417
|
+
> Matrix(IsBooleanMat, [[1, 0], [1, 1]]),
|
|
418
|
+
> Matrix(IsBooleanMat, [[1, 0], [0, 0]]),
|
|
419
|
+
> Matrix(IsBooleanMat, [[1, 0], [0, 0]]));;
|
|
420
|
+
gap> cong := LeftSemigroupCongruence(S, [S.3, S.4]);;
|
|
421
|
+
gap> NrEquivalenceClasses(cong);
|
|
422
|
+
16
|
|
423
|
+
gap> cong := RightSemigroupCongruence(S, [S.3, S.4]);;
|
|
424
|
+
gap> NrEquivalenceClasses(cong);
|
|
425
|
+
16
|
|
426
|
+
gap> cong := SemigroupCongruence(S, [S.3, S.4]);;
|
|
427
|
+
gap> NrEquivalenceClasses(cong);
|
|
428
|
+
16
|
|
429
|
+
|
|
430
|
+
# JoinSemigroupCongruences
|
|
431
|
+
gap> S := PartitionMonoid(3);;
|
|
432
|
+
gap> pairs1 := [[Bipartition([[1, 2, 3, -1, -2, -3]]),
|
|
433
|
+
> Bipartition([[1, 2, -1, -2, -3], [3]])]];;
|
|
434
|
+
gap> pairs2 := [[Bipartition([[1, 2, 3, -1, -2, -3]]),
|
|
435
|
+
> Bipartition([[1, 2, 3, -1, -2], [-3]])],
|
|
436
|
+
> [Bipartition([[1, 2, -1, -2], [3, -3]]),
|
|
437
|
+
> Bipartition([[1, 2, -3], [3, -1, -2]])]];;
|
|
438
|
+
gap> cong1 := SemigroupCongruence(S, pairs1);;
|
|
439
|
+
gap> cong2 := SemigroupCongruence(S, pairs2);;
|
|
440
|
+
gap> cong3 := JoinSemigroupCongruences(cong1, cong2);
|
|
441
|
+
<2-sided semigroup congruence over <regular bipartition *-monoid of size 203,
|
|
442
|
+
degree 3 with 4 generators> with 3 generating pairs>
|
|
443
|
+
gap> pairs1[1] in cong3;
|
|
444
|
+
true
|
|
445
|
+
gap> pairs2[1] in cong3;
|
|
446
|
+
true
|
|
447
|
+
gap> pairs2[2] in cong3;
|
|
448
|
+
true
|
|
449
|
+
gap> IsSubrelation(cong3, cong1) and IsSubrelation(cong3, cong2);
|
|
450
|
+
true
|
|
451
|
+
gap> IsSubrelation(cong2, cong1);
|
|
452
|
+
false
|
|
453
|
+
|
|
454
|
+
# JoinLeftSemigroupCongruences
|
|
455
|
+
gap> S := PartitionMonoid(3);;
|
|
456
|
+
gap> pairs1 := [[Bipartition([[1, 2, 3, -1, -2, -3]]),
|
|
457
|
+
> Bipartition([[1, 2, -1, -2, -3], [3]])]];;
|
|
458
|
+
gap> pairs2 := [[Bipartition([[1, 2, 3, -1, -2, -3]]),
|
|
459
|
+
> Bipartition([[1, 2, 3, -1, -2], [-3]])],
|
|
460
|
+
> [Bipartition([[1, 2, -1, -2], [3, -3]]),
|
|
461
|
+
> Bipartition([[1, 2, -3], [3, -1, -2]])]];;
|
|
462
|
+
gap> cong1 := LeftSemigroupCongruence(S, pairs1);;
|
|
463
|
+
gap> cong2 := LeftSemigroupCongruence(S, pairs2);;
|
|
464
|
+
gap> JoinLeftSemigroupCongruences(cong1, cong2);
|
|
465
|
+
<left semigroup congruence over <regular bipartition *-monoid of size 203,
|
|
466
|
+
degree 3 with 4 generators> with 3 generating pairs>
|
|
467
|
+
gap> pairs1[1] in cong3;
|
|
468
|
+
true
|
|
469
|
+
gap> pairs2[1] in cong3;
|
|
470
|
+
true
|
|
471
|
+
gap> pairs2[2] in cong3;
|
|
472
|
+
true
|
|
473
|
+
gap> IsSubrelation(cong3, cong1) and IsSubrelation(cong3, cong2);
|
|
474
|
+
true
|
|
475
|
+
gap> IsSubrelation(cong2, cong1);
|
|
476
|
+
false
|
|
477
|
+
|
|
478
|
+
# JoinRightSemigroupCongruences
|
|
479
|
+
gap> S := PartitionMonoid(3);;
|
|
480
|
+
gap> pairs1 := [[Bipartition([[1, 2, 3, -1, -2, -3]]),
|
|
481
|
+
> Bipartition([[1, 2, -1, -2, -3], [3]])]];;
|
|
482
|
+
gap> pairs2 := [[Bipartition([[1, 2, 3, -1, -2, -3]]),
|
|
483
|
+
> Bipartition([[1, 2, 3, -1, -2], [-3]])],
|
|
484
|
+
> [Bipartition([[1, 2, -1, -2], [3, -3]]),
|
|
485
|
+
> Bipartition([[1, 2, -3], [3, -1, -2]])]];;
|
|
486
|
+
gap> cong1 := RightSemigroupCongruence(S, pairs1);;
|
|
487
|
+
gap> cong2 := RightSemigroupCongruence(S, pairs2);;
|
|
488
|
+
gap> JoinRightSemigroupCongruences(cong1, cong2);
|
|
489
|
+
<right semigroup congruence over <regular bipartition *-monoid of size 203,
|
|
490
|
+
degree 3 with 4 generators> with 3 generating pairs>
|
|
491
|
+
gap> pairs1[1] in cong3;
|
|
492
|
+
true
|
|
493
|
+
gap> pairs2[1] in cong3;
|
|
494
|
+
true
|
|
495
|
+
gap> pairs2[2] in cong3;
|
|
496
|
+
true
|
|
497
|
+
gap> IsSubrelation(cong3, cong1) and IsSubrelation(cong3, cong2);
|
|
498
|
+
true
|
|
499
|
+
gap> IsSubrelation(cong2, cong1);
|
|
500
|
+
false
|
|
501
|
+
|
|
502
|
+
# Test \in for pair of the form [x, x]
|
|
503
|
+
gap> S := FreeBand(3);
|
|
504
|
+
<free band on the generators [ x1, x2, x3 ]>
|
|
505
|
+
gap> cong := SemigroupCongruence(S, [S.1, S.1 * S.2]);
|
|
506
|
+
<2-sided semigroup congruence over <free band on the generators
|
|
507
|
+
[ x1, x2, x3 ]> with 1 generating pairs>
|
|
508
|
+
gap> [S.1, S.1] in cong;
|
|
509
|
+
true
|
|
510
|
+
|
|
511
|
+
# EquivalenceRelationPartition
|
|
512
|
+
gap> S := PartialBrauerMonoid(2);;
|
|
513
|
+
gap> pair := [[Bipartition([[1, 2], [-1], [-2]]),
|
|
514
|
+
> Bipartition([[1, -1], [2], [-2]])]];;
|
|
515
|
+
gap> cong := SemigroupCongruence(S, pair);;
|
|
516
|
+
gap> EquivalenceRelationPartition(cong);
|
|
517
|
+
[ [ <bipartition: [ 1, 2 ], [ -1, -2 ]>,
|
|
518
|
+
<bipartition: [ 1 ], [ 2 ], [ -1, -2 ]> ],
|
|
519
|
+
[ <bipartition: [ 1, -1 ], [ 2 ], [ -2 ]>,
|
|
520
|
+
<bipartition: [ 1 ], [ 2, -1 ], [ -2 ]>,
|
|
521
|
+
<bipartition: [ 1, 2 ], [ -1 ], [ -2 ]>,
|
|
522
|
+
<bipartition: [ 1, -2 ], [ 2 ], [ -1 ]>,
|
|
523
|
+
<bipartition: [ 1 ], [ 2, -2 ], [ -1 ]>,
|
|
524
|
+
<bipartition: [ 1 ], [ 2 ], [ -1 ], [ -2 ]> ] ]
|
|
525
|
+
gap> cong := SemigroupCongruence(S, []);;
|
|
526
|
+
gap> IsEmpty(EquivalenceRelationPartition(cong));
|
|
527
|
+
true
|
|
528
|
+
gap> cong := UniversalSemigroupCongruence(S);;
|
|
529
|
+
gap> Length(EquivalenceRelationPartition(cong)) = 1;
|
|
530
|
+
true
|
|
531
|
+
|
|
532
|
+
# SemigroupCongruenceByGeneratingPairs bad input
|
|
533
|
+
gap> S := FullTransformationMonoid(3);;
|
|
534
|
+
gap> x := Transformation([1, 1, 1, 1]);;
|
|
535
|
+
gap> SemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2, S.3]]);
|
|
536
|
+
Error, the 2nd argument <pairs> must consist of lists of length 2
|
|
537
|
+
gap> SemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2], [S.1, x]]);
|
|
538
|
+
Error, the 2nd argument <pairs> must consist of lists of elements of the 1st a\
|
|
539
|
+
rgument <S> (a semigroup)
|
|
540
|
+
gap> LeftSemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2, S.3]]);
|
|
541
|
+
Error, the 2nd argument <pairs> must consist of lists of length 2
|
|
542
|
+
gap> LeftSemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2], [S.1, x]]);
|
|
543
|
+
Error, the 2nd argument <pairs> must consist of lists of elements of the 1st a\
|
|
544
|
+
rgument <S> (a semigroup)
|
|
545
|
+
gap> RightSemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2, S.3]]);
|
|
546
|
+
Error, the 2nd argument <pairs> must consist of lists of length 2
|
|
547
|
+
gap> RightSemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2], [S.1, x]]);
|
|
548
|
+
Error, the 2nd argument <pairs> must consist of lists of elements of the 1st a\
|
|
549
|
+
rgument <S> (a semigroup)
|
|
550
|
+
|
|
551
|
+
# SemigroupCongruenceByGeneratingPairs for infinite semigroups
|
|
552
|
+
gap> S := Semigroup(
|
|
553
|
+
> [Matrix(IsMaxPlusMatrix, [[-2, 2, 0], [-1, 0, 0], [1, -3, 1]]),
|
|
554
|
+
> Matrix(IsMaxPlusMatrix, [[-infinity, 0, 0], [0, 1, 0], [1, -1, 0]])]);;
|
|
555
|
+
gap> pairs := [[S.1, S.2]];;
|
|
556
|
+
gap> SemigroupCongruenceByGeneratingPairs(S, pairs);
|
|
557
|
+
<2-sided semigroup congruence over <semigroup of 3x3 max-plus matrices with 2
|
|
558
|
+
generators> with 1 generating pairs>
|
|
559
|
+
gap> LeftSemigroupCongruenceByGeneratingPairs(S, pairs);
|
|
560
|
+
<left semigroup congruence over <semigroup of 3x3 max-plus matrices with 2
|
|
561
|
+
generators> with 1 generating pairs>
|
|
562
|
+
gap> RightSemigroupCongruenceByGeneratingPairs(S, pairs);
|
|
563
|
+
<right semigroup congruence over <semigroup of 3x3 max-plus matrices with 2
|
|
564
|
+
generators> with 1 generating pairs>
|
|
565
|
+
|
|
566
|
+
# a left congruence over an fp semigroup
|
|
567
|
+
gap> F := FreeSemigroup(2);;
|
|
568
|
+
gap> S := F / [[F.2 ^ 2, F.2],
|
|
569
|
+
> [F.1 ^ 3, F.1 ^ 2],
|
|
570
|
+
> [F.2 * F.1 ^ 2, F.1 ^ 2],
|
|
571
|
+
> [F.1 * (F.1 * F.2) ^ 2, F.1 ^ 2 * F.2 * F.1],
|
|
572
|
+
> [(F.1 * F.2) ^ 2 * F.1, F.1],
|
|
573
|
+
> [(F.2 * F.1) ^ 2 * F.2, F.2]];;
|
|
574
|
+
gap> pair := [S.1 * S.2 * S.1, S.1];;
|
|
575
|
+
gap> cong := LeftSemigroupCongruence(S, pair);;
|
|
576
|
+
gap> class := EquivalenceClassOfElement(cong, S.1);;
|
|
577
|
+
gap> Size(class);
|
|
578
|
+
2
|
|
579
|
+
gap> Elements(class) = [S.1, S.1 * S.2 * S.1];
|
|
580
|
+
true
|
|
581
|
+
gap> classes := EquivalenceClasses(cong);;
|
|
582
|
+
gap> Length(classes);
|
|
583
|
+
8
|
|
584
|
+
gap> ForAll(S, x -> Number(classes, c -> x in c) = 1);
|
|
585
|
+
true
|
|
586
|
+
gap> part := EquivalenceRelationPartitionWithSingletons(cong);;
|
|
587
|
+
gap> SortedList(List(part, Size)) = [1, 1, 1, 1, 1, 2, 2, 2];
|
|
588
|
+
true
|
|
589
|
+
gap> Set(Flat(part)) = Set(S);
|
|
590
|
+
true
|
|
591
|
+
|
|
592
|
+
# a right congruence over an fp semigroup
|
|
593
|
+
gap> F := FreeSemigroup(2);;
|
|
594
|
+
gap> S := F / [[F.2 ^ 2, F.2],
|
|
595
|
+
> [F.1 ^ 3, F.1 ^ 2],
|
|
596
|
+
> [F.2 * F.1 ^ 2, F.1 ^ 2],
|
|
597
|
+
> [F.1 * (F.1 * F.2) ^ 2, F.1 ^ 2 * F.2 * F.1],
|
|
598
|
+
> [(F.1 * F.2) ^ 2 * F.1, F.1],
|
|
599
|
+
> [(F.2 * F.1) ^ 2 * F.2, F.2]];;
|
|
600
|
+
gap> pair := [S.1 * S.2 * S.1, S.1];;
|
|
601
|
+
gap> cong := RightSemigroupCongruence(S, pair);;
|
|
602
|
+
gap> class := EquivalenceClassOfElement(cong, S.1);;
|
|
603
|
+
gap> Elements(class) = [S.1, S.1 * S.2 * S.1];
|
|
604
|
+
true
|
|
605
|
+
gap> cong2 := RightSemigroupCongruence(S, [[S.1, S.2]]);;
|
|
606
|
+
gap> class2 := EquivalenceClassOfElement(cong2, S.1);;
|
|
607
|
+
gap> class < class2;
|
|
608
|
+
false
|
|
609
|
+
|
|
610
|
+
# \in: Bad input for an fp semigroup
|
|
611
|
+
gap> F := FreeSemigroup(2);;
|
|
612
|
+
gap> S := F / [[F.2 ^ 2, F.2],
|
|
613
|
+
> [F.1 ^ 3, F.1 ^ 2],
|
|
614
|
+
> [F.2 * F.1 ^ 2, F.1 ^ 2],
|
|
615
|
+
> [F.1 * (F.1 * F.2) ^ 2, F.1 ^ 2 * F.2 * F.1],
|
|
616
|
+
> [(F.1 * F.2) ^ 2 * F.1, F.1],
|
|
617
|
+
> [(F.2 * F.1) ^ 2 * F.2, F.2]];;
|
|
618
|
+
gap> pair := [S.1 * S.2 * S.1, S.1];;
|
|
619
|
+
gap> cong := RightSemigroupCongruence(S, pair);;
|
|
620
|
+
gap> [Transformation([2, 1, 1, 2, 1])] in cong;
|
|
621
|
+
Error, the 1st argument (a list) does not have length 2
|
|
622
|
+
gap> [Transformation([2, 1, 1, 2, 1]), Transformation([5, 2, 1, 2, 2])] in cong;
|
|
623
|
+
Error, the items in the 1st argument (a list) do not all belong to the range o\
|
|
624
|
+
f the 2nd argument (a right semigroup congruence)
|
|
625
|
+
|
|
626
|
+
# comparing congruence classes over fp semigroups
|
|
627
|
+
gap> F := FreeSemigroup(3);;
|
|
628
|
+
gap> gens := GeneratorsOfSemigroup(F);;
|
|
629
|
+
gap> rels := [];;
|
|
630
|
+
gap> x := 0;;
|
|
631
|
+
gap> for x in [1 .. Length(gens) - 1] do
|
|
632
|
+
> Append(rels, List(gens, y -> [gens[x] * y, y * gens[x]]));
|
|
633
|
+
> Add(rels, [gens[x] ^ (x + 1), gens[x]]);
|
|
634
|
+
> Add(rels, [gens[x] * Last(gens), gens[x]]);
|
|
635
|
+
> Add(rels, [Last(gens) * gens[x], gens[x]]);
|
|
636
|
+
> od;
|
|
637
|
+
gap> S := F / rels;;
|
|
638
|
+
gap> sgens := GeneratorsOfSemigroup(S);;
|
|
639
|
+
gap> cong := SemigroupCongruenceByGeneratingPairs(S, [[sgens[1], sgens[2]]]);;
|
|
640
|
+
gap> class1 := EquivalenceClassOfElement(cong, sgens[3]);;
|
|
641
|
+
gap> class2 := EquivalenceClassOfElement(cong, sgens[2]);;
|
|
642
|
+
gap> class1 < class2;
|
|
643
|
+
false
|
|
644
|
+
gap> class2 < class1;
|
|
645
|
+
true
|
|
646
|
+
gap> class1 > class2;
|
|
647
|
+
true
|
|
648
|
+
gap> class2 > class1;
|
|
649
|
+
false
|
|
650
|
+
gap> class1 = class2;
|
|
651
|
+
false
|
|
652
|
+
gap> class1 <> class2;
|
|
653
|
+
true
|
|
654
|
+
|
|
655
|
+
# creating a congruence over an fp monoid
|
|
656
|
+
gap> F := FreeMonoid(2);;
|
|
657
|
+
gap> S := F / [[F.2 ^ 2, F.2], [F.1 ^ 3, F.1 ^ 2]];;
|
|
658
|
+
gap> SemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2]]);
|
|
659
|
+
<2-sided semigroup congruence over <fp monoid with 2 generators and
|
|
660
|
+
2 relations of length 10> with 1 generating pairs>
|
|
661
|
+
gap> LeftSemigroupCongruenceByGeneratingPairs(F, [[F.1, F.2]]);
|
|
662
|
+
<left semigroup congruence over <free monoid on the generators
|
|
663
|
+
[ m1, m2 ]> with 1 generating pairs>
|
|
664
|
+
gap> RightSemigroupCongruenceByGeneratingPairs(F, [[F.1, F.2]]);
|
|
665
|
+
<right semigroup congruence over <free monoid on the generators
|
|
666
|
+
[ m1, m2 ]> with 1 generating pairs>
|
|
667
|
+
gap> LeftSemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2]]);
|
|
668
|
+
<left semigroup congruence over <fp monoid with 2 generators and
|
|
669
|
+
2 relations of length 10> with 1 generating pairs>
|
|
670
|
+
gap> RightSemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2]]);
|
|
671
|
+
<right semigroup congruence over <fp monoid with 2 generators and
|
|
672
|
+
2 relations of length 10> with 1 generating pairs>
|
|
673
|
+
|
|
674
|
+
# tests from congfpmon.tst
|
|
675
|
+
gap> F := FreeMonoid(2);;
|
|
676
|
+
gap> M := F / [[F.2 ^ 2, F.2], [F.1 ^ 3, F.1 ^ 2]];;
|
|
677
|
+
gap> cong := SemigroupCongruenceByGeneratingPairs(M, [[M.2]]);
|
|
678
|
+
Error, the 2nd argument <pairs> must consist of lists of length 2
|
|
679
|
+
gap> cong := SemigroupCongruenceByGeneratingPairs(M, [[M.1, F.1]]);
|
|
680
|
+
Error, the 2nd argument <pairs> must consist of lists of elements of the 1st a\
|
|
681
|
+
rgument <S> (a semigroup)
|
|
682
|
+
gap> cong := LeftSemigroupCongruenceByGeneratingPairs(M, [[M.2]]);
|
|
683
|
+
Error, the 2nd argument <pairs> must consist of lists of length 2
|
|
684
|
+
gap> cong := LeftSemigroupCongruenceByGeneratingPairs(M, [[M.1, F.1]]);
|
|
685
|
+
Error, the 2nd argument <pairs> must consist of lists of elements of the 1st a\
|
|
686
|
+
rgument <S> (a semigroup)
|
|
687
|
+
gap> cong := RightSemigroupCongruenceByGeneratingPairs(M, [[M.2]]);
|
|
688
|
+
Error, the 2nd argument <pairs> must consist of lists of length 2
|
|
689
|
+
gap> cong := RightSemigroupCongruenceByGeneratingPairs(M, [[M.1, F.1]]);
|
|
690
|
+
Error, the 2nd argument <pairs> must consist of lists of elements of the 1st a\
|
|
691
|
+
rgument <S> (a semigroup)
|
|
692
|
+
gap> cong := SemigroupCongruenceByGeneratingPairs(M, [[M.1, M.2]]);;
|
|
693
|
+
gap> [M.1, M.2, M.2 ^ 2] in cong;
|
|
694
|
+
Error, the 1st argument (a list) does not have length 2
|
|
695
|
+
gap> [F.1, F.2] in cong;
|
|
696
|
+
Error, the items in the 1st argument (a list) do not all belong to the range o\
|
|
697
|
+
f the 2nd argument (a 2-sided semigroup congruence)
|
|
698
|
+
gap> EquivalenceClassOfElement(cong, Transformation([1, 2, 1]));
|
|
699
|
+
Error, the 2nd argument (a mult. elt.) does not belong to the range of the 1st\
|
|
700
|
+
argument (a 2-sided congruence)
|
|
701
|
+
|
|
702
|
+
# A 2-sided example
|
|
703
|
+
gap> F := FreeMonoid(2);;
|
|
704
|
+
gap> M := F / [[F.2 ^ 2, F.2],
|
|
705
|
+
> [F.1 ^ 3, F.1 ^ 2],
|
|
706
|
+
> [F.2 * F.1 ^ 2, F.1 ^ 2],
|
|
707
|
+
> [F.1 * (F.1 * F.2) ^ 2, F.1 ^ 2 * F.2 * F.1],
|
|
708
|
+
> [(F.2 * F.1) ^ 2 * F.2, F.2]];;
|
|
709
|
+
gap> Size(M);
|
|
710
|
+
13
|
|
711
|
+
gap> M.1 ^ 2 = M.2 * M.1;
|
|
712
|
+
false
|
|
713
|
+
gap> (M.2 * M.1) ^ 2 * M.2 * M.1 ^ 2 = M.1 ^ 3;
|
|
714
|
+
true
|
|
715
|
+
gap> pair := [M.1 ^ 2 * M.2 * M.1, M.1 * M.2 * M.1];;
|
|
716
|
+
gap> cong := SemigroupCongruence(M, pair);
|
|
717
|
+
<2-sided semigroup congruence over <fp monoid with 2 generators and
|
|
718
|
+
5 relations of length 30> with 1 generating pairs>
|
|
719
|
+
gap> NrEquivalenceClasses(cong);
|
|
720
|
+
3
|
|
721
|
+
gap> [M.2, M.2 * M.1] in cong;
|
|
722
|
+
true
|
|
723
|
+
gap> part := EquivalenceRelationPartition(cong);;
|
|
724
|
+
gap> Length(part) = 1;
|
|
725
|
+
true
|
|
726
|
+
gap> Length(part[1]) = 11;
|
|
727
|
+
true
|
|
728
|
+
gap> Size(EquivalenceRelationCanonicalPartition(cong));
|
|
729
|
+
1
|
|
730
|
+
gap> Size(EquivalenceRelationCanonicalPartition(cong)[1]);
|
|
731
|
+
11
|
|
732
|
+
gap> EquivalenceRelationCanonicalLookup(cong);
|
|
733
|
+
[ 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ]
|
|
734
|
+
gap> ImagesElm(cong, GeneratorsOfMonoid(M)[1]);
|
|
735
|
+
[ m1 ]
|
|
736
|
+
gap> ImagesElm(cong, One(M));
|
|
737
|
+
[ <identity ...> ]
|
|
738
|
+
gap> classes := EquivalenceClasses(cong);;
|
|
739
|
+
gap> SortedList(List(classes, Size));
|
|
740
|
+
[ 1, 1, 11 ]
|
|
741
|
+
gap> gens := GeneratorsOfMonoid(M);;
|
|
742
|
+
gap> class1 := EquivalenceClassOfElement(cong, gens[2] * gens[1]);;
|
|
743
|
+
gap> class2 := EquivalenceClassOfElement(cong, gens[1]);;
|
|
744
|
+
gap> gens[1] ^ 2 in class1;
|
|
745
|
+
true
|
|
746
|
+
gap> gens[1] in class1;
|
|
747
|
+
false
|
|
748
|
+
gap> class1 = class2;
|
|
749
|
+
false
|
|
750
|
+
gap> enum := Enumerator(class1);;
|
|
751
|
+
gap> AsSSortedList(enum);
|
|
752
|
+
[ m2, m1^2, m1*m2, m2*m1, m1^2*m2, m1*m2*m1, m2*m1*m2, m1^2*m2*m1, (m1*m2)^2,
|
|
753
|
+
(m2*m1)^2, (m1*m2)^2*m1 ]
|
|
754
|
+
gap> Size(enum);
|
|
755
|
+
11
|
|
756
|
+
gap> class1 * class2 = EquivalenceClassOfElement(cong, gens[2] ^ 20 * gens[1] ^ 42);
|
|
757
|
+
true
|
|
758
|
+
gap> class1 * class2 = EquivalenceClassOfElement(cong, One(M));
|
|
759
|
+
false
|
|
760
|
+
|
|
761
|
+
# A left congruence example
|
|
762
|
+
gap> F := FreeMonoid(2);;
|
|
763
|
+
gap> M := F / [[F.1 * F.2 ^ 2, F.2 ^ 2],
|
|
764
|
+
> [F.2 ^ 3, F.2 ^ 2],
|
|
765
|
+
> [F.1 ^ 4, F.1],
|
|
766
|
+
> [F.2 * F.1 ^ 2 * F.2, F.2 ^ 2],
|
|
767
|
+
> [F.2 * F.1 ^ 3 * F.2, F.2],
|
|
768
|
+
> [(F.2 * F.1) ^ 2 * F.2, F.2],
|
|
769
|
+
> [F.2 ^ 2 * F.1 ^ 3, F.2 ^ 2],
|
|
770
|
+
> [F.2 * (F.2 * F.1) ^ 2, F.2 ^ 2 * F.1 ^ 2]];;
|
|
771
|
+
gap> Size(M);
|
|
772
|
+
40
|
|
773
|
+
gap> cong := LeftSemigroupCongruence(M, [M.1, M.2 ^ 3]);
|
|
774
|
+
<left semigroup congruence over <fp monoid with 2 generators and
|
|
775
|
+
8 relations of length 51> with 1 generating pairs>
|
|
776
|
+
gap> IsLeftSemigroupCongruence(cong);
|
|
777
|
+
true
|
|
778
|
+
gap> HasIsSemigroupCongruence(cong);
|
|
779
|
+
false
|
|
780
|
+
gap> NrEquivalenceClasses(cong);
|
|
781
|
+
11
|
|
782
|
+
gap> [M.1 ^ 9, M.2 * M.1 ^ 3 * M.2 * M.1] in cong;
|
|
783
|
+
true
|
|
784
|
+
gap> part := EquivalenceRelationPartition(cong);;
|
|
785
|
+
gap> Length(part) = 1;
|
|
786
|
+
true
|
|
787
|
+
gap> Length(part[1]) = 30;
|
|
788
|
+
true
|
|
789
|
+
gap> part := EquivalenceRelationCanonicalPartition(cong);;
|
|
790
|
+
gap> Size(part);
|
|
791
|
+
1
|
|
792
|
+
gap> Size(part[1]);
|
|
793
|
+
30
|
|
794
|
+
gap> EquivalenceRelationCanonicalLookup(cong);
|
|
795
|
+
[ 1, 2, 3, 2, 4, 2, 2, 2, 5, 2, 2, 6, 2, 7, 2, 2, 8, 2, 2, 2, 9, 2, 2, 10, 2,
|
|
796
|
+
2, 2, 2, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ]
|
|
797
|
+
gap> Set(ImagesElm(cong, M.1)) = part[1];
|
|
798
|
+
true
|
|
799
|
+
gap> ImagesElm(cong, One(M));
|
|
800
|
+
[ <identity ...> ]
|
|
801
|
+
gap> classes := EquivalenceClasses(cong);;
|
|
802
|
+
gap> SortedList(List(classes, Size));
|
|
803
|
+
[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30 ]
|
|
804
|
+
gap> class1 := EquivalenceClassOfElement(cong, M.2 * M.1 ^ 2);;
|
|
805
|
+
gap> class2 := EquivalenceClassOfElement(cong, M.2);;
|
|
806
|
+
gap> M.1 in class1;
|
|
807
|
+
true
|
|
808
|
+
gap> M.2 in class1;
|
|
809
|
+
false
|
|
810
|
+
gap> class1 = class2;
|
|
811
|
+
false
|
|
812
|
+
gap> enum := Enumerator(class1);;
|
|
813
|
+
gap> M.2 * M.1 in enum;
|
|
814
|
+
true
|
|
815
|
+
gap> M.2 * M.1 ^ 3 in enum;
|
|
816
|
+
true
|
|
817
|
+
gap> M.2 * M.1 * M.2 * M.1 in enum;
|
|
818
|
+
true
|
|
819
|
+
gap> Size(enum);
|
|
820
|
+
30
|
|
821
|
+
|
|
822
|
+
# A right congruence example
|
|
823
|
+
gap> F := FreeMonoid(2);;
|
|
824
|
+
gap> M := F / [[F.1 * F.2 ^ 2, F.2 ^ 2],
|
|
825
|
+
> [F.2 ^ 3, F.2 ^ 2],
|
|
826
|
+
> [F.1 ^ 4, F.1],
|
|
827
|
+
> [F.2 * F.1 ^ 2 * F.2, F.2 ^ 2],
|
|
828
|
+
> [F.2 * F.1 ^ 3 * F.2, F.2],
|
|
829
|
+
> [(F.2 * F.1) ^ 2 * F.2, F.2],
|
|
830
|
+
> [F.2 ^ 2 * F.1 ^ 3, F.2 ^ 2],
|
|
831
|
+
> [F.2 * (F.2 * F.1) ^ 2, F.2 ^ 2 * F.1 ^ 2]];;
|
|
832
|
+
gap> Size(M);
|
|
833
|
+
40
|
|
834
|
+
gap> cong := RightSemigroupCongruence(M, [M.1, M.2 ^ 3]);
|
|
835
|
+
<right semigroup congruence over <fp monoid with 2 generators and
|
|
836
|
+
8 relations of length 51> with 1 generating pairs>
|
|
837
|
+
gap> IsRightSemigroupCongruence(cong);
|
|
838
|
+
true
|
|
839
|
+
gap> HasIsSemigroupCongruence(cong);
|
|
840
|
+
false
|
|
841
|
+
gap> NrEquivalenceClasses(cong);
|
|
842
|
+
13
|
|
843
|
+
gap> [M.1 ^ 9, M.2 * M.1 ^ 3 * M.2 * M.1] in cong;
|
|
844
|
+
false
|
|
845
|
+
gap> [M.2 * M.1 * M.2 ^ 2, M.1 ^ 4] in cong;
|
|
846
|
+
true
|
|
847
|
+
gap> part := EquivalenceRelationCanonicalPartition(cong);;
|
|
848
|
+
gap> Length(part) = 4;
|
|
849
|
+
true
|
|
850
|
+
gap> Set(part, Length) = [4, 8, 11];
|
|
851
|
+
true
|
|
852
|
+
gap> part := EquivalenceRelationCanonicalPartition(cong);;
|
|
853
|
+
gap> Length(part);
|
|
854
|
+
4
|
|
855
|
+
gap> SortedList(List(part, Length));
|
|
856
|
+
[ 4, 8, 8, 11 ]
|
|
857
|
+
gap> EquivalenceRelationCanonicalLookup(cong);
|
|
858
|
+
[ 1, 2, 3, 4, 2, 5, 2, 6, 7, 4, 8, 9, 4, 2, 6, 6, 7, 10, 11, 6, 7, 4, 2, 2,
|
|
859
|
+
2, 6, 12, 6, 7, 4, 4, 2, 13, 2, 6, 6, 4, 2, 2, 4 ]
|
|
860
|
+
gap> part1 := First(part, l -> M.1 in l);;
|
|
861
|
+
gap> Set(ImagesElm(cong, M.1)) = part1;
|
|
862
|
+
true
|
|
863
|
+
gap> NrEquivalenceClasses(cong);
|
|
864
|
+
13
|
|
865
|
+
gap> ImagesElm(cong, One(M));
|
|
866
|
+
[ <identity ...> ]
|
|
867
|
+
gap> classes := EquivalenceClasses(cong);;
|
|
868
|
+
gap> SortedList(List(classes, Size));
|
|
869
|
+
[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8, 11 ]
|
|
870
|
+
gap> class1 := EquivalenceClassOfElement(cong, M.1 * (M.2 * M.1) ^ 2 * M.2);;
|
|
871
|
+
gap> class2 := EquivalenceClassOfElement(cong, M.2 ^ 2 * M.1);;
|
|
872
|
+
gap> M.1 in class1;
|
|
873
|
+
true
|
|
874
|
+
gap> M.2 in class1;
|
|
875
|
+
false
|
|
876
|
+
gap> class1 = class2;
|
|
877
|
+
false
|
|
878
|
+
gap> enum := Enumerator(class1);;
|
|
879
|
+
gap> M.2 ^ 2 in enum;
|
|
880
|
+
true
|
|
881
|
+
gap> M.1 * (M.1 * M.2) ^ 2 * M.1 ^ 3 in enum;
|
|
882
|
+
true
|
|
883
|
+
gap> enum[Position(enum, M.1 * (M.1 * M.2) ^ 2 * M.1 ^ 3)]
|
|
884
|
+
> = M.1 * (M.1 * M.2) ^ 2 * M.1 ^ 3;
|
|
885
|
+
true
|
|
886
|
+
gap> Size(enum);
|
|
887
|
+
11
|
|
888
|
+
|
|
889
|
+
# Joining two congs together
|
|
890
|
+
gap> F := FreeMonoid(2);;
|
|
891
|
+
gap> M := F / [[F.1 ^ 4, F.1 ^ 3],
|
|
892
|
+
> [F.1 ^ 3 * F.2, F.1 ^ 3],
|
|
893
|
+
> [F.1 * F.2 ^ 2 * F.1, F.1 ^ 2],
|
|
894
|
+
> [F.1 * F.2 ^ 3, F.1],
|
|
895
|
+
> [F.2 * F.1 ^ 3, F.1 ^ 3],
|
|
896
|
+
> [F.2 ^ 3 * F.1, F.1],
|
|
897
|
+
> [F.2 ^ 4, F.2],
|
|
898
|
+
> [F.1 ^ 2 * F.2 * F.1 ^ 2, F.1 ^ 2],
|
|
899
|
+
> [F.1 * (F.1 * F.2) ^ 2, F.1 ^ 2 * F.2 * F.1],
|
|
900
|
+
> [(F.1 * F.2) ^ 2 * F.1, F.1],
|
|
901
|
+
> [(F.2 * F.1) ^ 2 * F.1, F.1 * F.2 * F.1 ^ 2]];;
|
|
902
|
+
gap> Size(M);
|
|
903
|
+
39
|
|
904
|
+
gap> cong1 := SemigroupCongruence(M, [M.1, M.2]);;
|
|
905
|
+
gap> cong2 := SemigroupCongruence(M, [M.1, M.1 ^ 2]);;
|
|
906
|
+
gap> cong1 = cong2;
|
|
907
|
+
false
|
|
908
|
+
gap> IsSubrelation(cong1, cong2);
|
|
909
|
+
true
|
|
910
|
+
gap> JoinSemigroupCongruences(cong1, cong2) = cong1;
|
|
911
|
+
true
|
|
912
|
+
gap> M := F / [[F.1, F.2]];;
|
|
913
|
+
gap> cong3 := SemigroupCongruence(M, [M.1, M.2 ^ 10]);;
|
|
914
|
+
gap> JoinSemigroupCongruences(cong1, cong3);
|
|
915
|
+
Error, cannot form the join of congruences over different semigroups
|
|
916
|
+
|
|
917
|
+
# Joining two left congs together
|
|
918
|
+
gap> F := FreeMonoid(2);;
|
|
919
|
+
gap> M := F / [[F.1 ^ 4, F.1 ^ 3],
|
|
920
|
+
> [F.1 ^ 3 * F.2, F.1 ^ 3],
|
|
921
|
+
> [F.1 * F.2 ^ 2 * F.1, F.1 ^ 2],
|
|
922
|
+
> [F.1 * F.2 ^ 3, F.1],
|
|
923
|
+
> [F.2 * F.1 ^ 3, F.1 ^ 3],
|
|
924
|
+
> [F.2 ^ 3 * F.1, F.1],
|
|
925
|
+
> [F.2 ^ 4, F.2],
|
|
926
|
+
> [F.1 ^ 2 * F.2 * F.1 ^ 2, F.1 ^ 2],
|
|
927
|
+
> [F.1 * (F.1 * F.2) ^ 2, F.1 ^ 2 * F.2 * F.1],
|
|
928
|
+
> [(F.1 * F.2) ^ 2 * F.1, F.1],
|
|
929
|
+
> [(F.2 * F.1) ^ 2 * F.1, F.1 * F.2 * F.1 ^ 2]];;
|
|
930
|
+
gap> Size(M);
|
|
931
|
+
39
|
|
932
|
+
gap> cong1 := LeftSemigroupCongruence(M, [M.1, M.2]);;
|
|
933
|
+
gap> cong2 := LeftSemigroupCongruence(M, [M.1, M.1 ^ 2]);;
|
|
934
|
+
gap> cong1 = cong2;
|
|
935
|
+
false
|
|
936
|
+
gap> IsSubrelation(cong1, cong2);
|
|
937
|
+
true
|
|
938
|
+
gap> JoinLeftSemigroupCongruences(cong1, cong2) = cong1;
|
|
939
|
+
true
|
|
940
|
+
gap> M := F / [[F.1, F.2]];;
|
|
941
|
+
gap> cong3 := SemigroupCongruence(M, [M.1, M.2 ^ 10]);;
|
|
942
|
+
gap> JoinLeftSemigroupCongruences(cong1, cong3);
|
|
943
|
+
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
|
|
944
|
+
Error, no 1st choice method found for `JoinLeftSemigroupCongruences' on 2 argu\
|
|
945
|
+
ments
|
|
946
|
+
|
|
947
|
+
# Joining two right congs together
|
|
948
|
+
gap> F := FreeMonoid(2);;
|
|
949
|
+
gap> M := F / [[F.1 ^ 4, F.1 ^ 3],
|
|
950
|
+
> [F.1 ^ 3 * F.2, F.1 ^ 3],
|
|
951
|
+
> [F.1 * F.2 ^ 2 * F.1, F.1 ^ 2],
|
|
952
|
+
> [F.1 * F.2 ^ 3, F.1],
|
|
953
|
+
> [F.2 * F.1 ^ 3, F.1 ^ 3],
|
|
954
|
+
> [F.2 ^ 3 * F.1, F.1],
|
|
955
|
+
> [F.2 ^ 4, F.2],
|
|
956
|
+
> [F.1 ^ 2 * F.2 * F.1 ^ 2, F.1 ^ 2],
|
|
957
|
+
> [F.1 * (F.1 * F.2) ^ 2, F.1 ^ 2 * F.2 * F.1],
|
|
958
|
+
> [(F.1 * F.2) ^ 2 * F.1, F.1],
|
|
959
|
+
> [(F.2 * F.1) ^ 2 * F.1, F.1 * F.2 * F.1 ^ 2]];;
|
|
960
|
+
gap> Size(M);
|
|
961
|
+
39
|
|
962
|
+
gap> cong1 := RightSemigroupCongruence(M, [M.1, M.2]);;
|
|
963
|
+
gap> cong2 := RightSemigroupCongruence(M, [M.1, M.1 ^ 2]);;
|
|
964
|
+
gap> cong1 = cong2;
|
|
965
|
+
false
|
|
966
|
+
gap> IsSubrelation(cong1, cong2);
|
|
967
|
+
true
|
|
968
|
+
gap> JoinRightSemigroupCongruences(cong1, cong2) = cong1;
|
|
969
|
+
true
|
|
970
|
+
gap> M := F / [[F.1, F.2]];;
|
|
971
|
+
gap> cong3 := SemigroupCongruence(M, [M.1, M.2 ^ 10]);;
|
|
972
|
+
gap> JoinRightSemigroupCongruences(cong1, cong3);
|
|
973
|
+
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
|
|
974
|
+
Error, no 1st choice method found for `JoinRightSemigroupCongruences' on 2 arg\
|
|
975
|
+
uments
|
|
976
|
+
|
|
977
|
+
# AsSemigroupCongruenceByGeneratingPairs
|
|
978
|
+
gap> S := ReesMatrixSemigroup(SymmetricGroup(3), [[(1, 2), ()], [(), (1, 3)]]);
|
|
979
|
+
<Rees matrix semigroup 2x2 over Sym( [ 1 .. 3 ] )>
|
|
980
|
+
gap> cong := RMSCongruenceByLinkedTriple(S, Group((1, 2, 3)),
|
|
981
|
+
> [[1], [2]], [[1, 2]]);;
|
|
982
|
+
gap> ccong := AsSemigroupCongruenceByGeneratingPairs(cong);;
|
|
983
|
+
gap> C := UniversalSemigroupCongruence(S);;
|
|
984
|
+
gap> AsSemigroupCongruenceByGeneratingPairs(C);
|
|
985
|
+
<semigroup congruence over <Rees matrix semigroup 2x2 over Sym( [ 1 .. 3 ] )>
|
|
986
|
+
with linked triple (S3,1,1)>
|
|
987
|
+
gap> S := InverseSemigroup([PartialPerm([1, 2], [1, 2]),
|
|
988
|
+
> PartialPerm([1, 2], [2, 3])]);;
|
|
989
|
+
gap> pairs := [PartialPerm([], []), PartialPerm([1], [1])];;
|
|
990
|
+
gap> C := SemigroupCongruence(S, pairs);
|
|
991
|
+
<2-sided semigroup congruence over <inverse partial perm semigroup
|
|
992
|
+
of size 14, rank 3 with 2 generators> with 1 generating pairs>
|
|
993
|
+
gap> AsSemigroupCongruenceByGeneratingPairs(C);
|
|
994
|
+
<2-sided semigroup congruence over <inverse partial perm semigroup
|
|
995
|
+
of size 14, rank 3 with 2 generators> with 1 generating pairs>
|
|
996
|
+
gap> C := RightSemigroupCongruence(S, pairs);
|
|
997
|
+
<right semigroup congruence over <inverse partial perm semigroup of size 14,
|
|
998
|
+
rank 3 with 2 generators> with 1 generating pairs>
|
|
999
|
+
gap> AsRightSemigroupCongruenceByGeneratingPairs(C);
|
|
1000
|
+
<right semigroup congruence over <inverse partial perm semigroup of size 14,
|
|
1001
|
+
rank 3 with 2 generators> with 1 generating pairs>
|
|
1002
|
+
gap> C := LeftSemigroupCongruence(S, pairs);
|
|
1003
|
+
<left semigroup congruence over <inverse partial perm semigroup of size 14,
|
|
1004
|
+
rank 3 with 2 generators> with 1 generating pairs>
|
|
1005
|
+
gap> AsLeftSemigroupCongruenceByGeneratingPairs(C);
|
|
1006
|
+
<left semigroup congruence over <inverse partial perm semigroup of size 14,
|
|
1007
|
+
rank 3 with 2 generators> with 1 generating pairs>
|
|
1008
|
+
|
|
1009
|
+
#
|
|
1010
|
+
gap> SEMIGROUPS.StopTest();
|
|
1011
|
+
gap> STOP_TEST("Semigroups package: standard/congruences/congpairs.tst");
|