passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-gap-pkg-semigroups might be problematic. Click here for more details.
- gap/pkg/semigroups/CHANGELOG.md +1699 -0
- gap/pkg/semigroups/CONTRIBUTING.md +91 -0
- gap/pkg/semigroups/GNUmakefile +110 -0
- gap/pkg/semigroups/GNUmakefile.in +110 -0
- gap/pkg/semigroups/GPL +674 -0
- gap/pkg/semigroups/LICENSE +16 -0
- gap/pkg/semigroups/Makefile +26 -0
- gap/pkg/semigroups/Makefile.gappkg +225 -0
- gap/pkg/semigroups/PackageInfo.g +529 -0
- gap/pkg/semigroups/README.md +102 -0
- gap/pkg/semigroups/VERSIONS +112 -0
- gap/pkg/semigroups/aclocal.m4 +375 -0
- gap/pkg/semigroups/autogen.sh +25 -0
- gap/pkg/semigroups/bin/x86_64-pc-linux-gnu-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1069 -0
- gap/pkg/semigroups/config.status +1133 -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-6be12ad2.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,1134 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
#W standard/homomorph.tst
|
|
4
|
+
#Y Copyright (C) 2022 Artemis Konstantinidi
|
|
5
|
+
## Chinmaya Nagpal
|
|
6
|
+
##
|
|
7
|
+
## Licensing information can be found in the README file of this package.
|
|
8
|
+
##
|
|
9
|
+
#############################################################################
|
|
10
|
+
##
|
|
11
|
+
|
|
12
|
+
## We don't use local variables in this test file because it doesn't play nice
|
|
13
|
+
## with something in this test file.
|
|
14
|
+
|
|
15
|
+
#
|
|
16
|
+
gap> START_TEST("Semigroups package: standard/attributes/homomorph.tst");
|
|
17
|
+
gap> LoadPackage("semigroups", false);;
|
|
18
|
+
|
|
19
|
+
#
|
|
20
|
+
gap> SEMIGROUPS.StartTest();
|
|
21
|
+
|
|
22
|
+
# helper functions
|
|
23
|
+
gap> BruteForceHomoCheck := function(homo)
|
|
24
|
+
> local x, y;
|
|
25
|
+
> for x in Generators(Source(homo)) do
|
|
26
|
+
> for y in Generators(Source(homo)) do
|
|
27
|
+
> if x ^ homo * y ^ homo <> (x * y) ^ homo then
|
|
28
|
+
> return false;
|
|
29
|
+
> fi;
|
|
30
|
+
> od;
|
|
31
|
+
> od;
|
|
32
|
+
> return true;
|
|
33
|
+
> end;;
|
|
34
|
+
gap> BruteForceIsoCheck := function(iso)
|
|
35
|
+
> local x, y;
|
|
36
|
+
> if not IsInjective(iso) or not IsSurjective(iso) then
|
|
37
|
+
> return false;
|
|
38
|
+
> fi;
|
|
39
|
+
> for x in Generators(Source(iso)) do
|
|
40
|
+
> for y in Generators(Source(iso)) do
|
|
41
|
+
> if x ^ iso * y ^ iso <> (x * y) ^ iso then
|
|
42
|
+
> return false;
|
|
43
|
+
> fi;
|
|
44
|
+
> od;
|
|
45
|
+
> od;
|
|
46
|
+
> return true;
|
|
47
|
+
> end;;
|
|
48
|
+
gap> BruteForceInverseCheck := function(map)
|
|
49
|
+
> local inv;
|
|
50
|
+
> inv := InverseGeneralMapping(map);
|
|
51
|
+
> return ForAll(Source(map), x -> x = (x ^ map) ^ inv)
|
|
52
|
+
> and ForAll(Range(map), x -> x = (x ^ inv) ^ map);
|
|
53
|
+
> end;;
|
|
54
|
+
|
|
55
|
+
# Test for every generator in the first list is in the first semigroup
|
|
56
|
+
gap> S := FullTransformationMonoid(3);;
|
|
57
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
58
|
+
gap> y := [IdentityTransformation, Transformation([2, 3, 1]),
|
|
59
|
+
> Transformation([2, 1]), Transformation([1, 1, 1, 1])];;
|
|
60
|
+
gap> SemigroupHomomorphismByImages(S, S, y, gens);
|
|
61
|
+
Error, the 3rd argument (a list) must consist of elements of the 1st argument \
|
|
62
|
+
(a semigroup)
|
|
63
|
+
|
|
64
|
+
# Test for every element in the second list in the second semigroup
|
|
65
|
+
gap> S := FullTransformationMonoid(3);;
|
|
66
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
67
|
+
gap> y := [IdentityTransformation, Transformation([2, 3, 1]),
|
|
68
|
+
> Transformation([2, 1]), Transformation([1, 1, 1, 1])];;
|
|
69
|
+
gap> SemigroupHomomorphismByImages(S, S, gens, y);
|
|
70
|
+
Error, the 4th argument (a list) must consist of elements of the 2nd argument \
|
|
71
|
+
(a semigroup)
|
|
72
|
+
|
|
73
|
+
# Test for the first list generating the first semigroup
|
|
74
|
+
gap> S := FullTransformationMonoid(3);;
|
|
75
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
76
|
+
gap> z := [Transformation([2, 3, 1]), Transformation([2, 3, 1]),
|
|
77
|
+
> Transformation([2, 1]), Transformation([2, 1])];;
|
|
78
|
+
gap> SemigroupHomomorphismByImages(S, S, z, gens);
|
|
79
|
+
Error, the 1st argument (a semigroup) is not generated by the 3rd argument (a \
|
|
80
|
+
list)
|
|
81
|
+
|
|
82
|
+
# Test for the two lists being the same size
|
|
83
|
+
gap> S := FullTransformationMonoid(3);;
|
|
84
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
85
|
+
gap> j := [IdentityTransformation, Transformation([2, 3, 1]),
|
|
86
|
+
> Transformation([2, 1]), Transformation([1, 2, 1]),
|
|
87
|
+
> Transformation([1, 1])];;
|
|
88
|
+
gap> SemigroupHomomorphismByImages(S, S, j, gens);
|
|
89
|
+
Error, the 3rd argument (a list) and the 4th argument (a list) are not the sam\
|
|
90
|
+
e size
|
|
91
|
+
|
|
92
|
+
# Check that isomorphism work
|
|
93
|
+
gap> S := Semigroup([
|
|
94
|
+
> Matrix(IsNTPMatrix, [[0, 1, 2], [4, 3, 0], [0, 2, 0]], 9, 4),
|
|
95
|
+
> Matrix(IsNTPMatrix, [[1, 1, 0], [4, 1, 1], [0, 0, 0]], 9, 4)]);
|
|
96
|
+
<semigroup of 3x3 ntp matrices with 2 generators>
|
|
97
|
+
gap> T := AsSemigroup(IsTransformationSemigroup, S);
|
|
98
|
+
<transformation semigroup of size 46, degree 47 with 2 generators>
|
|
99
|
+
gap> SemigroupHomomorphismByImages(S, T, [2], GeneratorsOfSemigroup(T));
|
|
100
|
+
Error, the 3rd argument (a list) must consist of elements of the 1st argument \
|
|
101
|
+
(a semigroup)
|
|
102
|
+
gap> gens := [Matrix(IsNTPMatrix, [[0, 1, 2], [4, 3, 0], [0, 2, 0]], 9, 4)];;
|
|
103
|
+
gap> SemigroupHomomorphismByImages(S, T, gens, GeneratorsOfSemigroup(T));
|
|
104
|
+
Error, the 1st argument (a semigroup) is not generated by the 3rd argument (a \
|
|
105
|
+
list)
|
|
106
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
107
|
+
gap> SemigroupHomomorphismByImages(S, T, gens, [2]);
|
|
108
|
+
Error, the 4th argument (a list) must consist of elements of the 2nd argument \
|
|
109
|
+
(a semigroup)
|
|
110
|
+
gap> imgs := GeneratorsOfSemigroup(T);;
|
|
111
|
+
gap> SemigroupHomomorphismByImages(S, T, gens, [imgs[2]]);
|
|
112
|
+
Error, the 3rd argument (a list) and the 4th argument (a list) are not the sam\
|
|
113
|
+
e size
|
|
114
|
+
gap> gens := [gens[2], gens[1]];;
|
|
115
|
+
gap> imgs := [imgs[2], imgs[1]];;
|
|
116
|
+
gap> hom := SemigroupHomomorphismByImages(S, T, gens, imgs);
|
|
117
|
+
<semigroup of size 46, 3x3 ntp matrices with 2 generators> ->
|
|
118
|
+
<transformation semigroup of size 46, degree 47 with 2 generators>
|
|
119
|
+
gap> ImageElm(hom, 2);
|
|
120
|
+
Error, the 2nd argument (a mult. elt.) is not an element of the source of the \
|
|
121
|
+
1st argument (semigroup homom. by images)
|
|
122
|
+
gap> PreImagesRepresentative(hom, 2);
|
|
123
|
+
Error, the 2nd argument is not an element of the range of the 1st argument (se\
|
|
124
|
+
migroup homom. by images)
|
|
125
|
+
gap> PreImagesElm(hom, 2);
|
|
126
|
+
Error, the 2nd argument is not an element of the range of the 1st argument (se\
|
|
127
|
+
migroup homom. by images)
|
|
128
|
+
gap> PreImagesSet(hom, [2]);
|
|
129
|
+
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
|
|
130
|
+
Error, no 1st choice method found for `PreImagesSet' on 2 arguments
|
|
131
|
+
gap> IsSurjective(hom);
|
|
132
|
+
true
|
|
133
|
+
gap> IsInjective(hom);
|
|
134
|
+
true
|
|
135
|
+
gap> iso := SemigroupIsomorphismByImages(S, T);;
|
|
136
|
+
gap> BruteForceHomoCheck(iso);
|
|
137
|
+
true
|
|
138
|
+
gap> BruteForceInverseCheck(iso);
|
|
139
|
+
true
|
|
140
|
+
gap> Source(iso) = S;
|
|
141
|
+
true
|
|
142
|
+
gap> Range(iso) = T;
|
|
143
|
+
true
|
|
144
|
+
gap> S := Semigroup(IdentityTransformation);
|
|
145
|
+
<trivial transformation group of degree 0 with 1 generator>
|
|
146
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
147
|
+
gap> T := Semigroup(PartialPerm([]));
|
|
148
|
+
<trivial partial perm group of rank 0 with 1 generator>
|
|
149
|
+
gap> imgs := GeneratorsOfSemigroup(T);;
|
|
150
|
+
gap> iso := SemigroupIsomorphismByImages(S, T, gens, imgs);;
|
|
151
|
+
gap> BruteForceHomoCheck(iso);
|
|
152
|
+
true
|
|
153
|
+
gap> BruteForceInverseCheck(iso);
|
|
154
|
+
true
|
|
155
|
+
gap> IsSurjective(iso);
|
|
156
|
+
true
|
|
157
|
+
gap> IsInjective(iso);
|
|
158
|
+
true
|
|
159
|
+
gap> Print(iso, "\n");
|
|
160
|
+
SemigroupIsomorphismByImages( Monoid( [ IdentityTransformation ] ), Monoid( [ \
|
|
161
|
+
PartialPerm( [ ], [ ] ) ] ), [ IdentityTransformation ], [ PartialPerm( [ ]\
|
|
162
|
+
, [ ] ) ] )
|
|
163
|
+
gap> EvalString(String(hom)) = hom;
|
|
164
|
+
true
|
|
165
|
+
gap> S := TrivialSemigroup();
|
|
166
|
+
<trivial transformation group of degree 0 with 1 generator>
|
|
167
|
+
gap> T := FullTransformationSemigroup(2);
|
|
168
|
+
<full transformation monoid of degree 2>
|
|
169
|
+
gap> SemigroupIsomorphismByImages(S, T, [S.1, S.1], [T.1, T.2]);
|
|
170
|
+
fail
|
|
171
|
+
|
|
172
|
+
# homomorph: SemigroupHomomorphismByImages, for infinite semigroup(s)
|
|
173
|
+
gap> S := FreeSemigroup(1);;
|
|
174
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
175
|
+
gap> T := TrivialSemigroup();;
|
|
176
|
+
gap> imgs := GeneratorsOfSemigroup(T);;
|
|
177
|
+
gap> hom := SemigroupHomomorphismByImages(S, T, gens, imgs);
|
|
178
|
+
<free semigroup on the generators [ s1 ]> -> <trivial transformation group of
|
|
179
|
+
degree 0 with 1 generator>
|
|
180
|
+
|
|
181
|
+
# homomorph: SemigroupHomomorphismByImages, for trivial semigroups
|
|
182
|
+
gap> S := TrivialSemigroup(IsTransformationSemigroup);
|
|
183
|
+
<trivial transformation group of degree 0 with 1 generator>
|
|
184
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
185
|
+
gap> T := TrivialSemigroup(IsBipartitionSemigroup);
|
|
186
|
+
<trivial block bijection group of degree 1 with 1 generator>
|
|
187
|
+
gap> imgs := GeneratorsOfSemigroup(T);;
|
|
188
|
+
gap> hom := SemigroupHomomorphismByImages(S, T, gens, imgs);;
|
|
189
|
+
gap> BruteForceHomoCheck(hom);
|
|
190
|
+
true
|
|
191
|
+
gap> Print(hom, "\n");
|
|
192
|
+
SemigroupHomomorphismByImages( Monoid( [ IdentityTransformation ] ), Monoid( [\
|
|
193
|
+
Bipartition([ [ 1, -1 ] ]) ] ), [ IdentityTransformation ], [ Bipartition([ [\
|
|
194
|
+
1, -1 ] ]) ] )
|
|
195
|
+
gap> EvalString(String(hom)) = hom;
|
|
196
|
+
true
|
|
197
|
+
gap> KernelOfSemigroupHomomorphism(hom);
|
|
198
|
+
<universal semigroup congruence over <trivial transformation group of
|
|
199
|
+
degree 0 with 1 generator>>
|
|
200
|
+
|
|
201
|
+
# homomorph: SemigroupHomomorphismByImages, for monogenic semigroups
|
|
202
|
+
gap> S := MonogenicSemigroup(IsTransformationSemigroup, 3, 2);
|
|
203
|
+
<commutative non-regular transformation semigroup of size 4, degree 5 with 1
|
|
204
|
+
generator>
|
|
205
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
206
|
+
gap> T := MonogenicSemigroup(IsBipartitionSemigroup, 3, 2);
|
|
207
|
+
<commutative non-regular block bijection semigroup of size 4, degree 6 with 1
|
|
208
|
+
generator>
|
|
209
|
+
gap> imgs := GeneratorsOfSemigroup(T);;
|
|
210
|
+
gap> hom := SemigroupHomomorphismByImages(S, T);
|
|
211
|
+
<commutative non-regular transformation semigroup of size 4, degree 5 with 1
|
|
212
|
+
generator> -> <commutative non-regular block bijection semigroup of size 4,
|
|
213
|
+
degree 6 with 1 generator>
|
|
214
|
+
gap> BruteForceHomoCheck(hom);
|
|
215
|
+
true
|
|
216
|
+
gap> iso := SemigroupIsomorphismByImages(S, gens, imgs);
|
|
217
|
+
<commutative non-regular transformation semigroup of size 4, degree 5 with 1
|
|
218
|
+
generator> -> <commutative block bijection semigroup of size 4, degree 6
|
|
219
|
+
with 1 generator>
|
|
220
|
+
gap> BruteForceIsoCheck(iso);
|
|
221
|
+
true
|
|
222
|
+
gap> BruteForceInverseCheck(iso);
|
|
223
|
+
true
|
|
224
|
+
gap> map := x -> T.1 ^ Length(Factorization(S, x));;
|
|
225
|
+
gap> inv := x -> S.1 ^ Length(Factorization(T, x));;
|
|
226
|
+
gap> iso := SemigroupIsomorphismByFunction(S, T, map, inv);;
|
|
227
|
+
gap> Print(iso, "\n");
|
|
228
|
+
SemigroupIsomorphismByFunction( Semigroup( [ Transformation( [ 2, 1, 2, 3, 4 ]\
|
|
229
|
+
) ] ), Semigroup( [ Bipartition([ [ 1, -2 ], [ 2, -1 ], [ 3, 4, -3, -6 ], [ 5\
|
|
230
|
+
, -4 ], [ 6, -5 ] ]) ] ), function ( x ) return T.1 ^ Length( Factorization( S\
|
|
231
|
+
, x ) ); end, function ( x ) return S.1 ^ Length( Factorization( T, x ) ); end\
|
|
232
|
+
)
|
|
233
|
+
gap> EvalString(String(iso)) = iso;
|
|
234
|
+
true
|
|
235
|
+
|
|
236
|
+
# homomorph: SemigroupHomomorphismByImages, for simple semigroups
|
|
237
|
+
gap> S := ReesMatrixSemigroup(SymmetricGroup(3), [[(), (1, 3, 2)],
|
|
238
|
+
> [(2, 3), (1, 2)],
|
|
239
|
+
> [(), (2, 3, 1)]]);
|
|
240
|
+
<Rees matrix semigroup 2x3 over Sym( [ 1 .. 3 ] )>
|
|
241
|
+
gap> gensS := GeneratorsOfSemigroup(S);;
|
|
242
|
+
gap> U := AsSemigroup(IsBipartitionSemigroup, S);
|
|
243
|
+
<bipartition semigroup of size 36, degree 37 with 4 generators>
|
|
244
|
+
gap> gensU := GeneratorsOfSemigroup(U);;
|
|
245
|
+
gap> V := AsSemigroup(IsTransformationSemigroup, S);
|
|
246
|
+
<transformation semigroup of size 36, degree 37 with 4 generators>
|
|
247
|
+
gap> gensV := GeneratorsOfSemigroup(V);;
|
|
248
|
+
gap> hom1 := SemigroupHomomorphismByImages(S, U, gensS, gensU);;
|
|
249
|
+
gap> BruteForceHomoCheck(hom);
|
|
250
|
+
true
|
|
251
|
+
gap> hom2 := SemigroupHomomorphismByImages(U, S, gensU, gensS);;
|
|
252
|
+
gap> BruteForceHomoCheck(hom);
|
|
253
|
+
true
|
|
254
|
+
gap> hom3 := SemigroupHomomorphismByImages(U, V, gensU, gensV);;
|
|
255
|
+
gap> BruteForceHomoCheck(hom);
|
|
256
|
+
true
|
|
257
|
+
gap> hom1 = hom2;
|
|
258
|
+
false
|
|
259
|
+
gap> hom1 = hom3;
|
|
260
|
+
false
|
|
261
|
+
gap> hom3 = hom2;
|
|
262
|
+
false
|
|
263
|
+
gap> iso := SemigroupIsomorphismByImages(U, V, gensV);;
|
|
264
|
+
gap> BruteForceIsoCheck(iso);
|
|
265
|
+
true
|
|
266
|
+
gap> BruteForceInverseCheck(iso);
|
|
267
|
+
true
|
|
268
|
+
|
|
269
|
+
# homomorph: SemigroupHomomorphismByImages, for 0-simple semigroups
|
|
270
|
+
gap> S := ReesZeroMatrixSemigroup(SymmetricGroup(3), [[(), (1, 3, 2)],
|
|
271
|
+
> [0, (1, 2)],
|
|
272
|
+
> [(), (2, 3, 1)]]);
|
|
273
|
+
<Rees 0-matrix semigroup 2x3 over Sym( [ 1 .. 3 ] )>
|
|
274
|
+
gap> gensS := GeneratorsOfSemigroup(S);;
|
|
275
|
+
gap> T := ReesZeroMatrixSemigroup(SymmetricGroup(3), [[(), ()],
|
|
276
|
+
> [(), ()],
|
|
277
|
+
> [(), 0]]);
|
|
278
|
+
<Rees 0-matrix semigroup 2x3 over Sym( [ 1 .. 3 ] )>
|
|
279
|
+
gap> gensT := GeneratorsOfSemigroup(T);;
|
|
280
|
+
gap> U := AsSemigroup(IsBipartitionSemigroup, S);
|
|
281
|
+
<bipartition semigroup of size 37, degree 38 with 5 generators>
|
|
282
|
+
gap> gensU := GeneratorsOfSemigroup(U);;
|
|
283
|
+
gap> V := AsSemigroup(IsTransformationSemigroup, S);
|
|
284
|
+
<transformation semigroup of size 37, degree 38 with 5 generators>
|
|
285
|
+
gap> gensV := GeneratorsOfSemigroup(V);;
|
|
286
|
+
gap> hom := SemigroupHomomorphismByImages(S, U, gensS, gensU);;
|
|
287
|
+
gap> BruteForceHomoCheck(hom);
|
|
288
|
+
true
|
|
289
|
+
gap> hom := SemigroupHomomorphismByImages(U, S, gensU, gensS);;
|
|
290
|
+
gap> BruteForceHomoCheck(hom);
|
|
291
|
+
true
|
|
292
|
+
gap> hom := SemigroupHomomorphismByImages(U, V, gensU, gensV);;
|
|
293
|
+
gap> BruteForceHomoCheck(hom);
|
|
294
|
+
true
|
|
295
|
+
gap> SemigroupHomomorphismByImages(U, T, gensU, gensT);
|
|
296
|
+
fail
|
|
297
|
+
gap> F := FreeSemigroup(1);;
|
|
298
|
+
gap> F := F / [[F.1 ^ 4, F.1]];;
|
|
299
|
+
gap> S := ReesZeroMatrixSemigroup(F, [[F.1]]);;
|
|
300
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
301
|
+
gap> T := ReesZeroMatrixSemigroup(F, [[F.1 ^ 2]]);;
|
|
302
|
+
gap> map := IsomorphismSemigroups(S, T);;
|
|
303
|
+
gap> imgs := List(gens, x -> x ^ map);;
|
|
304
|
+
gap> hom := SemigroupHomomorphismByImages(S, T, gens, imgs);;
|
|
305
|
+
gap> BruteForceHomoCheck(hom);
|
|
306
|
+
true
|
|
307
|
+
|
|
308
|
+
# for monogenic semigroups
|
|
309
|
+
gap> S := MonogenicSemigroup(4, 5);;
|
|
310
|
+
gap> T := MonogenicSemigroup(20, 1);;
|
|
311
|
+
gap> imgs := GeneratorsOfSemigroup(T);;
|
|
312
|
+
gap> SemigroupHomomorphismByImages(S, T, imgs);
|
|
313
|
+
fail
|
|
314
|
+
gap> S := MonogenicSemigroup(1, 4);;
|
|
315
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
316
|
+
gap> T := MonogenicSemigroup(2, 3);;
|
|
317
|
+
gap> imgs := GeneratorsOfSemigroup(T);;
|
|
318
|
+
gap> SemigroupHomomorphismByImages(S, gens, imgs);
|
|
319
|
+
fail
|
|
320
|
+
gap> S := MonogenicSemigroup(1, 4);;
|
|
321
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
322
|
+
gap> T := Semigroup(Generators(S) ^ (1, 2));;
|
|
323
|
+
gap> imgs := GeneratorsOfSemigroup(T);;
|
|
324
|
+
gap> SemigroupHomomorphismByImages(S, T, imgs) <> fail;
|
|
325
|
+
true
|
|
326
|
+
|
|
327
|
+
# SemigroupHomomorphismByImages
|
|
328
|
+
gap> S := FullTransformationMonoid(3);
|
|
329
|
+
<full transformation monoid of degree 3>
|
|
330
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
331
|
+
gap> T := AsMonoid(IsPBRMonoid, S);
|
|
332
|
+
<pbr monoid of size 27, degree 3 with 3 generators>
|
|
333
|
+
gap> imgs := GeneratorsOfSemigroup(T);;
|
|
334
|
+
gap> hom := SemigroupHomomorphismByImages(S, gens, imgs);
|
|
335
|
+
<full transformation monoid of degree 3> ->
|
|
336
|
+
<pbr monoid of degree 3 with 3 generators>
|
|
337
|
+
gap> BruteForceHomoCheck(hom);
|
|
338
|
+
true
|
|
339
|
+
gap> Print(hom, "\n");
|
|
340
|
+
SemigroupHomomorphismByImages( Monoid( [ Transformation( [ 2, 3, 1 ] ), Transf\
|
|
341
|
+
ormation( [ 2, 1 ] ), Transformation( [ 1, 2, 1 ] ) ] ), Monoid( [ PBR([ [ -2 \
|
|
342
|
+
], [ -3 ], [ -1 ] ], [ [ 3 ], [ 1 ], [ 2 ] ]), PBR([ [ -2 ], [ -1 ], [ -3 ] ],\
|
|
343
|
+
[ [ 2 ], [ 1 ], [ 3 ] ]), PBR([ [ -1 ], [ -2 ], [ -1 ] ], [ [ 1, 3 ], [ 2 ], \
|
|
344
|
+
[ ] ]) ] ), [ IdentityTransformation, Transformation( [ 2, 3, 1 ] ), Transfor\
|
|
345
|
+
mation( [ 2, 1 ] ), Transformation( [ 1, 2, 1 ] ) ], [ PBR([ [ -1 ], [ -2 ], [\
|
|
346
|
+
-3 ] ], [ [ 1 ], [ 2 ], [ 3 ] ]), PBR([ [ -2 ], [ -3 ], [ -1 ] ], [ [ 3 ], [ \
|
|
347
|
+
1 ], [ 2 ] ]), PBR([ [ -2 ], [ -1 ], [ -3 ] ], [ [ 2 ], [ 1 ], [ 3 ] ]), PBR([\
|
|
348
|
+
[ -1 ], [ -2 ], [ -1 ] ], [ [ 1, 3 ], [ 2 ], [ ] ]) ] )
|
|
349
|
+
gap> EvalString(String(hom)) = hom;
|
|
350
|
+
true
|
|
351
|
+
|
|
352
|
+
# Tests with the same group
|
|
353
|
+
gap> S := FullTransformationMonoid(3);;
|
|
354
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
355
|
+
gap> imgs := ListWithIdenticalEntries(4, ConstantTransformation(3, 1));;
|
|
356
|
+
gap> hom1 := SemigroupHomomorphismByImages(S, S, gens, imgs);;
|
|
357
|
+
gap> BruteForceHomoCheck(hom1);
|
|
358
|
+
true
|
|
359
|
+
gap> Source(hom1) = S;
|
|
360
|
+
true
|
|
361
|
+
gap> Range(hom1) = S;
|
|
362
|
+
true
|
|
363
|
+
gap> hom2 := SemigroupHomomorphismByImages(S, S, gens, gens);;
|
|
364
|
+
gap> BruteForceHomoCheck(hom2);
|
|
365
|
+
true
|
|
366
|
+
gap> Range(hom2) = S;
|
|
367
|
+
true
|
|
368
|
+
gap> Source(hom2) = S;
|
|
369
|
+
true
|
|
370
|
+
gap> ImagesSource(hom2) = S;
|
|
371
|
+
true
|
|
372
|
+
gap> map := hom2;;
|
|
373
|
+
gap> ForAll(S, x -> ForAll(S, y -> (x * y) ^ map = x ^ map * y ^ map));
|
|
374
|
+
true
|
|
375
|
+
gap> IsSurjective(hom2);
|
|
376
|
+
true
|
|
377
|
+
gap> IsInjective(hom2);
|
|
378
|
+
true
|
|
379
|
+
gap> IsBijective(hom2);
|
|
380
|
+
true
|
|
381
|
+
gap> AsSemigroupIsomorphismByFunction(hom2);
|
|
382
|
+
<full transformation monoid of degree 3> ->
|
|
383
|
+
<full transformation monoid of degree 3>
|
|
384
|
+
gap> x := ConstantTransformation(2, 1);
|
|
385
|
+
Transformation( [ 1, 1 ] )
|
|
386
|
+
gap> x ^ map;
|
|
387
|
+
Transformation( [ 1, 1 ] )
|
|
388
|
+
gap> imgs2 := [gens[2], gens[2], gens[1], gens[3]];;
|
|
389
|
+
gap> hom3 := SemigroupHomomorphismByImages(S, S, gens, imgs2);
|
|
390
|
+
fail
|
|
391
|
+
|
|
392
|
+
# Tests with semigroups of different sizes, testing every single function
|
|
393
|
+
gap> S := FullTransformationMonoid(3);;
|
|
394
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
395
|
+
gap> J := FullTransformationMonoid(4);;
|
|
396
|
+
gap> imgs := ListWithIdenticalEntries(4, ConstantTransformation(3, 1));;
|
|
397
|
+
gap> hom := SemigroupHomomorphismByImages(S, J, gens, imgs);
|
|
398
|
+
<full transformation monoid of degree 3> ->
|
|
399
|
+
<full transformation monoid of degree 4>
|
|
400
|
+
gap> BruteForceHomoCheck(hom);
|
|
401
|
+
true
|
|
402
|
+
gap> ImagesSource(hom);
|
|
403
|
+
<transformation semigroup of degree 3 with 4 generators>
|
|
404
|
+
gap> PreImagesElm(hom, Transformation([1, 1, 1]));
|
|
405
|
+
[ Transformation( [ 1, 1, 1 ] ), Transformation( [ 1, 1, 2 ] ),
|
|
406
|
+
Transformation( [ 1, 1 ] ), Transformation( [ 1, 2, 1 ] ),
|
|
407
|
+
Transformation( [ 1, 2, 2 ] ), IdentityTransformation,
|
|
408
|
+
Transformation( [ 1, 3, 1 ] ), Transformation( [ 1, 3, 2 ] ),
|
|
409
|
+
Transformation( [ 1, 3, 3 ] ), Transformation( [ 2, 1, 1 ] ),
|
|
410
|
+
Transformation( [ 2, 1, 2 ] ), Transformation( [ 2, 1 ] ),
|
|
411
|
+
Transformation( [ 2, 2, 1 ] ), Transformation( [ 2, 2, 2 ] ),
|
|
412
|
+
Transformation( [ 2, 2 ] ), Transformation( [ 2, 3, 1 ] ),
|
|
413
|
+
Transformation( [ 2, 3, 2 ] ), Transformation( [ 2, 3, 3 ] ),
|
|
414
|
+
Transformation( [ 3, 1, 1 ] ), Transformation( [ 3, 1, 2 ] ),
|
|
415
|
+
Transformation( [ 3, 1, 3 ] ), Transformation( [ 3, 2, 1 ] ),
|
|
416
|
+
Transformation( [ 3, 2, 2 ] ), Transformation( [ 3, 2, 3 ] ),
|
|
417
|
+
Transformation( [ 3, 3, 1 ] ), Transformation( [ 3, 3, 2 ] ),
|
|
418
|
+
Transformation( [ 3, 3, 3 ] ) ]
|
|
419
|
+
gap> PreImagesSet(hom, [Transformation([1, 1, 1])]);
|
|
420
|
+
[ Transformation( [ 1, 1, 1 ] ), Transformation( [ 1, 1, 2 ] ),
|
|
421
|
+
Transformation( [ 1, 1 ] ), Transformation( [ 1, 2, 1 ] ),
|
|
422
|
+
Transformation( [ 1, 2, 2 ] ), IdentityTransformation,
|
|
423
|
+
Transformation( [ 1, 3, 1 ] ), Transformation( [ 1, 3, 2 ] ),
|
|
424
|
+
Transformation( [ 1, 3, 3 ] ), Transformation( [ 2, 1, 1 ] ),
|
|
425
|
+
Transformation( [ 2, 1, 2 ] ), Transformation( [ 2, 1 ] ),
|
|
426
|
+
Transformation( [ 2, 2, 1 ] ), Transformation( [ 2, 2, 2 ] ),
|
|
427
|
+
Transformation( [ 2, 2 ] ), Transformation( [ 2, 3, 1 ] ),
|
|
428
|
+
Transformation( [ 2, 3, 2 ] ), Transformation( [ 2, 3, 3 ] ),
|
|
429
|
+
Transformation( [ 3, 1, 1 ] ), Transformation( [ 3, 1, 2 ] ),
|
|
430
|
+
Transformation( [ 3, 1, 3 ] ), Transformation( [ 3, 2, 1 ] ),
|
|
431
|
+
Transformation( [ 3, 2, 2 ] ), Transformation( [ 3, 2, 3 ] ),
|
|
432
|
+
Transformation( [ 3, 3, 1 ] ), Transformation( [ 3, 3, 2 ] ),
|
|
433
|
+
Transformation( [ 3, 3, 3 ] ) ]
|
|
434
|
+
gap> PreImagesRepresentative(hom, Transformation([1, 1, 1]));
|
|
435
|
+
IdentityTransformation
|
|
436
|
+
gap> PreImagesRepresentative(hom, Transformation([3, 3, 4, 3]));
|
|
437
|
+
fail
|
|
438
|
+
gap> PreImagesElm(hom, Transformation([3, 3, 4, 3]));
|
|
439
|
+
Error, the 2nd argument is not mapped to by the 1st argument (semigroup homom.\
|
|
440
|
+
by images)
|
|
441
|
+
gap> IsSurjective(hom);
|
|
442
|
+
false
|
|
443
|
+
gap> IsInjective(hom);
|
|
444
|
+
false
|
|
445
|
+
gap> IsBijective(hom);
|
|
446
|
+
false
|
|
447
|
+
gap> IsTotal(hom);
|
|
448
|
+
true
|
|
449
|
+
gap> IsSingleValued(hom);
|
|
450
|
+
true
|
|
451
|
+
gap> IsMapping(hom);
|
|
452
|
+
true
|
|
453
|
+
gap> Range(hom);
|
|
454
|
+
<full transformation monoid of degree 4>
|
|
455
|
+
gap> Source(hom);
|
|
456
|
+
<full transformation monoid of degree 3>
|
|
457
|
+
gap> UnderlyingRelation(hom);
|
|
458
|
+
<object>
|
|
459
|
+
gap> ImagesSource(hom);
|
|
460
|
+
<trivial transformation group of degree 3 with 4 generators>
|
|
461
|
+
gap> ImagesElm(hom, gens[1]);
|
|
462
|
+
[ Transformation( [ 1, 1, 1 ] ) ]
|
|
463
|
+
gap> ImagesSet(hom, [gens[1]]);
|
|
464
|
+
[ Transformation( [ 1, 1, 1 ] ) ]
|
|
465
|
+
gap> Image(hom);
|
|
466
|
+
<trivial transformation group of degree 3 with 4 generators>
|
|
467
|
+
gap> Image(hom, gens[1]);
|
|
468
|
+
Transformation( [ 1, 1, 1 ] )
|
|
469
|
+
gap> Image(hom, [gens[1]]);
|
|
470
|
+
[ Transformation( [ 1, 1, 1 ] ) ]
|
|
471
|
+
gap> Images(hom);
|
|
472
|
+
<trivial transformation group of degree 3 with 4 generators>
|
|
473
|
+
gap> Images(hom, gens[1]);
|
|
474
|
+
[ Transformation( [ 1, 1, 1 ] ) ]
|
|
475
|
+
gap> Images(hom, [gens[1]]);
|
|
476
|
+
[ Transformation( [ 1, 1, 1 ] ) ]
|
|
477
|
+
gap> PreImagesRange(hom);
|
|
478
|
+
<full transformation monoid of degree 3>
|
|
479
|
+
|
|
480
|
+
#
|
|
481
|
+
gap> PreImageElm(hom, imgs[1]);
|
|
482
|
+
Error, <map> must be injective and surjective
|
|
483
|
+
gap> PreImagesRepresentative(hom, imgs[1]);
|
|
484
|
+
IdentityTransformation
|
|
485
|
+
gap> PreImagesSet(hom, [imgs[1]]);
|
|
486
|
+
[ Transformation( [ 1, 1, 1 ] ), Transformation( [ 1, 1, 2 ] ),
|
|
487
|
+
Transformation( [ 1, 1 ] ), Transformation( [ 1, 2, 1 ] ),
|
|
488
|
+
Transformation( [ 1, 2, 2 ] ), IdentityTransformation,
|
|
489
|
+
Transformation( [ 1, 3, 1 ] ), Transformation( [ 1, 3, 2 ] ),
|
|
490
|
+
Transformation( [ 1, 3, 3 ] ), Transformation( [ 2, 1, 1 ] ),
|
|
491
|
+
Transformation( [ 2, 1, 2 ] ), Transformation( [ 2, 1 ] ),
|
|
492
|
+
Transformation( [ 2, 2, 1 ] ), Transformation( [ 2, 2, 2 ] ),
|
|
493
|
+
Transformation( [ 2, 2 ] ), Transformation( [ 2, 3, 1 ] ),
|
|
494
|
+
Transformation( [ 2, 3, 2 ] ), Transformation( [ 2, 3, 3 ] ),
|
|
495
|
+
Transformation( [ 3, 1, 1 ] ), Transformation( [ 3, 1, 2 ] ),
|
|
496
|
+
Transformation( [ 3, 1, 3 ] ), Transformation( [ 3, 2, 1 ] ),
|
|
497
|
+
Transformation( [ 3, 2, 2 ] ), Transformation( [ 3, 2, 3 ] ),
|
|
498
|
+
Transformation( [ 3, 3, 1 ] ), Transformation( [ 3, 3, 2 ] ),
|
|
499
|
+
Transformation( [ 3, 3, 3 ] ) ]
|
|
500
|
+
gap> PreImagesSet(hom, [Transformation([3, 3, 4, 3])]);
|
|
501
|
+
Error, the 2nd argument is not mapped to by the 1st argument (semigroup homom.\
|
|
502
|
+
by images)
|
|
503
|
+
gap> PreImage(hom);
|
|
504
|
+
<full transformation monoid of degree 3>
|
|
505
|
+
|
|
506
|
+
#
|
|
507
|
+
gap> PreImage(hom, imgs[1]);
|
|
508
|
+
Error, <map> must be an injective and surjective mapping
|
|
509
|
+
gap> PreImage(hom, [imgs[1]]);
|
|
510
|
+
[ Transformation( [ 1, 1, 1 ] ), Transformation( [ 1, 1, 2 ] ),
|
|
511
|
+
Transformation( [ 1, 1 ] ), Transformation( [ 1, 2, 1 ] ),
|
|
512
|
+
Transformation( [ 1, 2, 2 ] ), IdentityTransformation,
|
|
513
|
+
Transformation( [ 1, 3, 1 ] ), Transformation( [ 1, 3, 2 ] ),
|
|
514
|
+
Transformation( [ 1, 3, 3 ] ), Transformation( [ 2, 1, 1 ] ),
|
|
515
|
+
Transformation( [ 2, 1, 2 ] ), Transformation( [ 2, 1 ] ),
|
|
516
|
+
Transformation( [ 2, 2, 1 ] ), Transformation( [ 2, 2, 2 ] ),
|
|
517
|
+
Transformation( [ 2, 2 ] ), Transformation( [ 2, 3, 1 ] ),
|
|
518
|
+
Transformation( [ 2, 3, 2 ] ), Transformation( [ 2, 3, 3 ] ),
|
|
519
|
+
Transformation( [ 3, 1, 1 ] ), Transformation( [ 3, 1, 2 ] ),
|
|
520
|
+
Transformation( [ 3, 1, 3 ] ), Transformation( [ 3, 2, 1 ] ),
|
|
521
|
+
Transformation( [ 3, 2, 2 ] ), Transformation( [ 3, 2, 3 ] ),
|
|
522
|
+
Transformation( [ 3, 3, 1 ] ), Transformation( [ 3, 3, 2 ] ),
|
|
523
|
+
Transformation( [ 3, 3, 3 ] ) ]
|
|
524
|
+
gap> PreImages(hom);
|
|
525
|
+
<full transformation monoid of degree 3>
|
|
526
|
+
gap> PreImages(hom, imgs[1]);
|
|
527
|
+
[ Transformation( [ 1, 1, 1 ] ), Transformation( [ 1, 1, 2 ] ),
|
|
528
|
+
Transformation( [ 1, 1 ] ), Transformation( [ 1, 2, 1 ] ),
|
|
529
|
+
Transformation( [ 1, 2, 2 ] ), IdentityTransformation,
|
|
530
|
+
Transformation( [ 1, 3, 1 ] ), Transformation( [ 1, 3, 2 ] ),
|
|
531
|
+
Transformation( [ 1, 3, 3 ] ), Transformation( [ 2, 1, 1 ] ),
|
|
532
|
+
Transformation( [ 2, 1, 2 ] ), Transformation( [ 2, 1 ] ),
|
|
533
|
+
Transformation( [ 2, 2, 1 ] ), Transformation( [ 2, 2, 2 ] ),
|
|
534
|
+
Transformation( [ 2, 2 ] ), Transformation( [ 2, 3, 1 ] ),
|
|
535
|
+
Transformation( [ 2, 3, 2 ] ), Transformation( [ 2, 3, 3 ] ),
|
|
536
|
+
Transformation( [ 3, 1, 1 ] ), Transformation( [ 3, 1, 2 ] ),
|
|
537
|
+
Transformation( [ 3, 1, 3 ] ), Transformation( [ 3, 2, 1 ] ),
|
|
538
|
+
Transformation( [ 3, 2, 2 ] ), Transformation( [ 3, 2, 3 ] ),
|
|
539
|
+
Transformation( [ 3, 3, 1 ] ), Transformation( [ 3, 3, 2 ] ),
|
|
540
|
+
Transformation( [ 3, 3, 3 ] ) ]
|
|
541
|
+
gap> PreImages(hom, [imgs[1]]);
|
|
542
|
+
[ Transformation( [ 1, 1, 1 ] ), Transformation( [ 1, 1, 2 ] ),
|
|
543
|
+
Transformation( [ 1, 1 ] ), Transformation( [ 1, 2, 1 ] ),
|
|
544
|
+
Transformation( [ 1, 2, 2 ] ), IdentityTransformation,
|
|
545
|
+
Transformation( [ 1, 3, 1 ] ), Transformation( [ 1, 3, 2 ] ),
|
|
546
|
+
Transformation( [ 1, 3, 3 ] ), Transformation( [ 2, 1, 1 ] ),
|
|
547
|
+
Transformation( [ 2, 1, 2 ] ), Transformation( [ 2, 1 ] ),
|
|
548
|
+
Transformation( [ 2, 2, 1 ] ), Transformation( [ 2, 2, 2 ] ),
|
|
549
|
+
Transformation( [ 2, 2 ] ), Transformation( [ 2, 3, 1 ] ),
|
|
550
|
+
Transformation( [ 2, 3, 2 ] ), Transformation( [ 2, 3, 3 ] ),
|
|
551
|
+
Transformation( [ 3, 1, 1 ] ), Transformation( [ 3, 1, 2 ] ),
|
|
552
|
+
Transformation( [ 3, 1, 3 ] ), Transformation( [ 3, 2, 1 ] ),
|
|
553
|
+
Transformation( [ 3, 2, 2 ] ), Transformation( [ 3, 2, 3 ] ),
|
|
554
|
+
Transformation( [ 3, 3, 1 ] ), Transformation( [ 3, 3, 2 ] ),
|
|
555
|
+
Transformation( [ 3, 3, 3 ] ) ]
|
|
556
|
+
gap> hom := AsSemigroupHomomorphismByFunction(hom);
|
|
557
|
+
<full transformation monoid of degree 3> ->
|
|
558
|
+
<full transformation monoid of degree 4>
|
|
559
|
+
gap> KernelOfSemigroupHomomorphism(hom);
|
|
560
|
+
<universal semigroup congruence over <full transformation monoid of degree 3>>
|
|
561
|
+
gap> Print(hom, "\n");
|
|
562
|
+
SemigroupHomomorphismByFunction( Monoid( [ Transformation( [ 2, 3, 1 ] ), Tran\
|
|
563
|
+
sformation( [ 2, 1 ] ), Transformation( [ 1, 2, 1 ] ) ] ), Monoid( [ Transform\
|
|
564
|
+
ation( [ 2, 3, 4, 1 ] ), Transformation( [ 2, 1 ] ), Transformation( [ 1, 2, 3\
|
|
565
|
+
, 1 ] ) ] ), function ( x ) return ImageElm( hom, x ); end )
|
|
566
|
+
gap> EvalString(String(hom)) = hom;
|
|
567
|
+
true
|
|
568
|
+
gap> IsSurjective(hom);
|
|
569
|
+
false
|
|
570
|
+
gap> IsInjective(hom);
|
|
571
|
+
false
|
|
572
|
+
gap> IsBijective(hom);
|
|
573
|
+
false
|
|
574
|
+
gap> IsTotal(hom);
|
|
575
|
+
true
|
|
576
|
+
gap> IsSingleValued(hom);
|
|
577
|
+
true
|
|
578
|
+
gap> IsMapping(hom);
|
|
579
|
+
true
|
|
580
|
+
gap> Range(hom);
|
|
581
|
+
<full transformation monoid of degree 4>
|
|
582
|
+
gap> Source(hom);
|
|
583
|
+
<full transformation monoid of degree 3>
|
|
584
|
+
gap> UnderlyingRelation(hom);
|
|
585
|
+
<object>
|
|
586
|
+
gap> ImagesSource(hom);
|
|
587
|
+
[ Transformation( [ 1, 1, 1 ] ) ]
|
|
588
|
+
gap> ImagesElm(hom, gens[1]);
|
|
589
|
+
[ Transformation( [ 1, 1, 1 ] ) ]
|
|
590
|
+
gap> ImagesSet(hom, [gens[1]]);
|
|
591
|
+
[ Transformation( [ 1, 1, 1 ] ) ]
|
|
592
|
+
gap> Image(hom);
|
|
593
|
+
[ Transformation( [ 1, 1, 1 ] ) ]
|
|
594
|
+
gap> Image(hom, gens[1]);
|
|
595
|
+
Transformation( [ 1, 1, 1 ] )
|
|
596
|
+
gap> Image(hom, [gens[1]]);
|
|
597
|
+
[ Transformation( [ 1, 1, 1 ] ) ]
|
|
598
|
+
gap> Images(hom);
|
|
599
|
+
[ Transformation( [ 1, 1, 1 ] ) ]
|
|
600
|
+
gap> Images(hom, gens[1]);
|
|
601
|
+
[ Transformation( [ 1, 1, 1 ] ) ]
|
|
602
|
+
gap> Images(hom, [gens[1]]);
|
|
603
|
+
[ Transformation( [ 1, 1, 1 ] ) ]
|
|
604
|
+
gap> PreImagesRange(hom);
|
|
605
|
+
<full transformation monoid of degree 3>
|
|
606
|
+
|
|
607
|
+
#
|
|
608
|
+
gap> PreImageElm(hom, imgs[1]);
|
|
609
|
+
Error, <map> must be injective and surjective
|
|
610
|
+
gap> PreImagesSet(hom, [imgs[1]]);
|
|
611
|
+
[ Transformation( [ 1, 1, 1 ] ), Transformation( [ 1, 1, 2 ] ),
|
|
612
|
+
Transformation( [ 1, 1 ] ), Transformation( [ 1, 2, 1 ] ),
|
|
613
|
+
Transformation( [ 1, 2, 2 ] ), IdentityTransformation,
|
|
614
|
+
Transformation( [ 1, 3, 1 ] ), Transformation( [ 1, 3, 2 ] ),
|
|
615
|
+
Transformation( [ 1, 3, 3 ] ), Transformation( [ 2, 1, 1 ] ),
|
|
616
|
+
Transformation( [ 2, 1, 2 ] ), Transformation( [ 2, 1 ] ),
|
|
617
|
+
Transformation( [ 2, 2, 1 ] ), Transformation( [ 2, 2, 2 ] ),
|
|
618
|
+
Transformation( [ 2, 2 ] ), Transformation( [ 2, 3, 1 ] ),
|
|
619
|
+
Transformation( [ 2, 3, 2 ] ), Transformation( [ 2, 3, 3 ] ),
|
|
620
|
+
Transformation( [ 3, 1, 1 ] ), Transformation( [ 3, 1, 2 ] ),
|
|
621
|
+
Transformation( [ 3, 1, 3 ] ), Transformation( [ 3, 2, 1 ] ),
|
|
622
|
+
Transformation( [ 3, 2, 2 ] ), Transformation( [ 3, 2, 3 ] ),
|
|
623
|
+
Transformation( [ 3, 3, 1 ] ), Transformation( [ 3, 3, 2 ] ),
|
|
624
|
+
Transformation( [ 3, 3, 3 ] ) ]
|
|
625
|
+
gap> PreImage(hom);
|
|
626
|
+
<full transformation monoid of degree 3>
|
|
627
|
+
|
|
628
|
+
#
|
|
629
|
+
gap> PreImage(hom, imgs[1]);
|
|
630
|
+
Error, <map> must be an injective and surjective mapping
|
|
631
|
+
gap> PreImage(hom, [imgs[1]]);
|
|
632
|
+
[ Transformation( [ 1, 1, 1 ] ), Transformation( [ 1, 1, 2 ] ),
|
|
633
|
+
Transformation( [ 1, 1 ] ), Transformation( [ 1, 2, 1 ] ),
|
|
634
|
+
Transformation( [ 1, 2, 2 ] ), IdentityTransformation,
|
|
635
|
+
Transformation( [ 1, 3, 1 ] ), Transformation( [ 1, 3, 2 ] ),
|
|
636
|
+
Transformation( [ 1, 3, 3 ] ), Transformation( [ 2, 1, 1 ] ),
|
|
637
|
+
Transformation( [ 2, 1, 2 ] ), Transformation( [ 2, 1 ] ),
|
|
638
|
+
Transformation( [ 2, 2, 1 ] ), Transformation( [ 2, 2, 2 ] ),
|
|
639
|
+
Transformation( [ 2, 2 ] ), Transformation( [ 2, 3, 1 ] ),
|
|
640
|
+
Transformation( [ 2, 3, 2 ] ), Transformation( [ 2, 3, 3 ] ),
|
|
641
|
+
Transformation( [ 3, 1, 1 ] ), Transformation( [ 3, 1, 2 ] ),
|
|
642
|
+
Transformation( [ 3, 1, 3 ] ), Transformation( [ 3, 2, 1 ] ),
|
|
643
|
+
Transformation( [ 3, 2, 2 ] ), Transformation( [ 3, 2, 3 ] ),
|
|
644
|
+
Transformation( [ 3, 3, 1 ] ), Transformation( [ 3, 3, 2 ] ),
|
|
645
|
+
Transformation( [ 3, 3, 3 ] ) ]
|
|
646
|
+
gap> PreImages(hom);
|
|
647
|
+
<full transformation monoid of degree 3>
|
|
648
|
+
gap> PreImages(hom, imgs[1]);
|
|
649
|
+
[ Transformation( [ 1, 1, 1 ] ), Transformation( [ 1, 1, 2 ] ),
|
|
650
|
+
Transformation( [ 1, 1 ] ), Transformation( [ 1, 2, 1 ] ),
|
|
651
|
+
Transformation( [ 1, 2, 2 ] ), IdentityTransformation,
|
|
652
|
+
Transformation( [ 1, 3, 1 ] ), Transformation( [ 1, 3, 2 ] ),
|
|
653
|
+
Transformation( [ 1, 3, 3 ] ), Transformation( [ 2, 1, 1 ] ),
|
|
654
|
+
Transformation( [ 2, 1, 2 ] ), Transformation( [ 2, 1 ] ),
|
|
655
|
+
Transformation( [ 2, 2, 1 ] ), Transformation( [ 2, 2, 2 ] ),
|
|
656
|
+
Transformation( [ 2, 2 ] ), Transformation( [ 2, 3, 1 ] ),
|
|
657
|
+
Transformation( [ 2, 3, 2 ] ), Transformation( [ 2, 3, 3 ] ),
|
|
658
|
+
Transformation( [ 3, 1, 1 ] ), Transformation( [ 3, 1, 2 ] ),
|
|
659
|
+
Transformation( [ 3, 1, 3 ] ), Transformation( [ 3, 2, 1 ] ),
|
|
660
|
+
Transformation( [ 3, 2, 2 ] ), Transformation( [ 3, 2, 3 ] ),
|
|
661
|
+
Transformation( [ 3, 3, 1 ] ), Transformation( [ 3, 3, 2 ] ),
|
|
662
|
+
Transformation( [ 3, 3, 3 ] ) ]
|
|
663
|
+
gap> PreImages(hom, [imgs[1]]);
|
|
664
|
+
[ Transformation( [ 1, 1, 1 ] ), Transformation( [ 1, 1, 2 ] ),
|
|
665
|
+
Transformation( [ 1, 1 ] ), Transformation( [ 1, 2, 1 ] ),
|
|
666
|
+
Transformation( [ 1, 2, 2 ] ), IdentityTransformation,
|
|
667
|
+
Transformation( [ 1, 3, 1 ] ), Transformation( [ 1, 3, 2 ] ),
|
|
668
|
+
Transformation( [ 1, 3, 3 ] ), Transformation( [ 2, 1, 1 ] ),
|
|
669
|
+
Transformation( [ 2, 1, 2 ] ), Transformation( [ 2, 1 ] ),
|
|
670
|
+
Transformation( [ 2, 2, 1 ] ), Transformation( [ 2, 2, 2 ] ),
|
|
671
|
+
Transformation( [ 2, 2 ] ), Transformation( [ 2, 3, 1 ] ),
|
|
672
|
+
Transformation( [ 2, 3, 2 ] ), Transformation( [ 2, 3, 3 ] ),
|
|
673
|
+
Transformation( [ 3, 1, 1 ] ), Transformation( [ 3, 1, 2 ] ),
|
|
674
|
+
Transformation( [ 3, 1, 3 ] ), Transformation( [ 3, 2, 1 ] ),
|
|
675
|
+
Transformation( [ 3, 2, 2 ] ), Transformation( [ 3, 2, 3 ] ),
|
|
676
|
+
Transformation( [ 3, 3, 1 ] ), Transformation( [ 3, 3, 2 ] ),
|
|
677
|
+
Transformation( [ 3, 3, 3 ] ) ]
|
|
678
|
+
|
|
679
|
+
# Tests with semigroups to the trivial semigroup
|
|
680
|
+
gap> T := TrivialSemigroup();;
|
|
681
|
+
gap> S := GLM(2, 2);;
|
|
682
|
+
gap> gens := GeneratorsOfSemigroup(S);
|
|
683
|
+
[ <an immutable 2x2 matrix over GF2>, <an immutable 2x2 matrix over GF2>,
|
|
684
|
+
<an immutable 2x2 matrix over GF2>, <an immutable 2x2 matrix over GF2> ]
|
|
685
|
+
gap> imgs := ListX(gens, x -> IdentityTransformation);
|
|
686
|
+
[ IdentityTransformation, IdentityTransformation, IdentityTransformation,
|
|
687
|
+
IdentityTransformation ]
|
|
688
|
+
gap> hom := SemigroupHomomorphismByImages(S, T, gens, imgs);
|
|
689
|
+
<general linear monoid 2x2 over GF(2)> -> <trivial transformation group of
|
|
690
|
+
degree 0 with 1 generator>
|
|
691
|
+
gap> BruteForceHomoCheck(hom);
|
|
692
|
+
true
|
|
693
|
+
gap> PreImagesElm(hom, IdentityTransformation);
|
|
694
|
+
[ <an immutable 2x2 matrix over GF2>, <an immutable 2x2 matrix over GF2>,
|
|
695
|
+
<an immutable 2x2 matrix over GF2>, <an immutable 2x2 matrix over GF2>,
|
|
696
|
+
<an immutable 2x2 matrix over GF2>, <an immutable 2x2 matrix over GF2>,
|
|
697
|
+
<an immutable 2x2 matrix over GF2>, <an immutable 2x2 matrix over GF2>,
|
|
698
|
+
<an immutable 2x2 matrix over GF2>, <an immutable 2x2 matrix over GF2>,
|
|
699
|
+
<an immutable 2x2 matrix over GF2>, <an immutable 2x2 matrix over GF2>,
|
|
700
|
+
<an immutable 2x2 matrix over GF2>, <an immutable 2x2 matrix over GF2>,
|
|
701
|
+
<an immutable 2x2 matrix over GF2>, <an immutable 2x2 matrix over GF2> ]
|
|
702
|
+
gap> IsSurjective(hom);
|
|
703
|
+
true
|
|
704
|
+
gap> IsInjective(hom);
|
|
705
|
+
false
|
|
706
|
+
gap> S := FullTransformationMonoid(3);
|
|
707
|
+
<full transformation monoid of degree 3>
|
|
708
|
+
gap> gens := GeneratorsOfSemigroup(S);
|
|
709
|
+
[ IdentityTransformation, Transformation( [ 2, 3, 1 ] ),
|
|
710
|
+
Transformation( [ 2, 1 ] ), Transformation( [ 1, 2, 1 ] ) ]
|
|
711
|
+
gap> imgs := ListX(gens, x -> IdentityTransformation);
|
|
712
|
+
[ IdentityTransformation, IdentityTransformation, IdentityTransformation,
|
|
713
|
+
IdentityTransformation ]
|
|
714
|
+
gap> hom2 := SemigroupHomomorphismByImages(S, T, gens, imgs);
|
|
715
|
+
<full transformation monoid of degree 3> -> <trivial transformation group of
|
|
716
|
+
degree 0 with 1 generator>
|
|
717
|
+
gap> hom = hom2;
|
|
718
|
+
false
|
|
719
|
+
|
|
720
|
+
# Test with quotient semigroup
|
|
721
|
+
gap> S := Semigroup([Transformation([2, 1, 5, 1, 5]),
|
|
722
|
+
> Transformation([1, 1, 1, 5, 3]), Transformation([2, 5, 3, 5, 3])]);;
|
|
723
|
+
gap> cong := SemigroupCongruence(S, [[Transformation([1, 1, 1, 1, 1]), Transformation([1, 1, 1, 3, 3])]]);
|
|
724
|
+
<2-sided semigroup congruence over <transformation semigroup of degree 5 with
|
|
725
|
+
3 generators> with 1 generating pairs>
|
|
726
|
+
gap> T := S / cong;;
|
|
727
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
728
|
+
gap> images := List(gens, gen -> EquivalenceClassOfElement(cong, gen));;
|
|
729
|
+
gap> hom1 := SemigroupHomomorphismByImages_NC(S, T, gens, images);;
|
|
730
|
+
gap> BruteForceHomoCheck(hom1);
|
|
731
|
+
true
|
|
732
|
+
gap> gens[1] ^ hom1 = images[1];
|
|
733
|
+
true
|
|
734
|
+
gap> ImageElm(hom1, gens[1]) = images[1];
|
|
735
|
+
true
|
|
736
|
+
gap> IsSurjective(hom1);
|
|
737
|
+
true
|
|
738
|
+
gap> IsInjective(hom1);
|
|
739
|
+
false
|
|
740
|
+
gap> hom2 := hom1;;
|
|
741
|
+
gap> hom2 = hom1;
|
|
742
|
+
true
|
|
743
|
+
gap> gens2 := [gens[3], gens[1], gens[2]];;
|
|
744
|
+
gap> images2 := [images[3], images[1], images[2]];;
|
|
745
|
+
gap> hom2 := SemigroupHomomorphismByImages(Semigroup(gens2),
|
|
746
|
+
> Semigroup(images2), gens2, images2);;
|
|
747
|
+
gap> BruteForceHomoCheck(hom2);
|
|
748
|
+
true
|
|
749
|
+
gap> hom1 = hom2;
|
|
750
|
+
true
|
|
751
|
+
gap> cong = KernelOfSemigroupHomomorphism(hom1);
|
|
752
|
+
true
|
|
753
|
+
|
|
754
|
+
# Test with transformation semigroup isomorphic to quotient semigroup above
|
|
755
|
+
gap> S := Semigroup([Transformation([2, 1, 5, 1, 5]),
|
|
756
|
+
> Transformation([1, 1, 1, 5, 3]), Transformation([2, 5, 3, 5, 3])]);;
|
|
757
|
+
gap> congs := CongruencesOfSemigroup(S);;
|
|
758
|
+
gap> cong := congs[4];;
|
|
759
|
+
gap> T := S / cong;;
|
|
760
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
761
|
+
gap> images := List(gens, gen -> EquivalenceClassOfElement(cong, gen));;
|
|
762
|
+
gap> hom1 := SemigroupHomomorphismByImages_NC(S, T, gens, images);;
|
|
763
|
+
gap> BruteForceHomoCheck(hom1);
|
|
764
|
+
true
|
|
765
|
+
gap> map := IsomorphismTransformationSemigroup(ImagesSource(hom1));;
|
|
766
|
+
gap> K := Range(map);;
|
|
767
|
+
gap> images2 := GeneratorsOfSemigroup(K);;
|
|
768
|
+
gap> hom2 := SemigroupHomomorphismByImages(S, K, gens, images2);;
|
|
769
|
+
gap> BruteForceHomoCheck(hom2);
|
|
770
|
+
true
|
|
771
|
+
gap> ImagesSource(hom2) = K;
|
|
772
|
+
true
|
|
773
|
+
gap> PreImagesRange(hom2);
|
|
774
|
+
<transformation semigroup of size 59, degree 5 with 3 generators>
|
|
775
|
+
gap> PreImagesRepresentative(hom2, images2[2]);
|
|
776
|
+
Transformation( [ 1, 1, 1, 5, 3 ] )
|
|
777
|
+
gap> PreImagesSet(hom2, [images2[1]]) = [gens[1]];
|
|
778
|
+
true
|
|
779
|
+
gap> ImageElm(hom2, gens[1]) = images2[1];
|
|
780
|
+
true
|
|
781
|
+
gap> IsSurjective(hom2);
|
|
782
|
+
true
|
|
783
|
+
gap> IsInjective(hom2);
|
|
784
|
+
false
|
|
785
|
+
gap> IsBijective(hom2);
|
|
786
|
+
false
|
|
787
|
+
gap> gens3 := [gens[3], gens[1], gens[2]];;
|
|
788
|
+
gap> images3 := [images2[3], images2[1], images2[2]];;
|
|
789
|
+
gap> hom3 := SemigroupHomomorphismByImages(Semigroup(gens3),
|
|
790
|
+
> Semigroup(images3), gens3, images3);;
|
|
791
|
+
gap> BruteForceHomoCheck(hom3);
|
|
792
|
+
true
|
|
793
|
+
gap> hom3 = hom2;
|
|
794
|
+
true
|
|
795
|
+
gap> EvalString(String(hom3)) = hom3;
|
|
796
|
+
true
|
|
797
|
+
gap> hom1bf := AsSemigroupHomomorphismByFunction(hom1);
|
|
798
|
+
<transformation semigroup of size 59, degree 5 with 3 generators> ->
|
|
799
|
+
<quotient of <2-sided semigroup congruence over <transformation semigroup
|
|
800
|
+
of size 59, degree 5 with 3 generators> with 1 generating pairs>>
|
|
801
|
+
gap> KernelOfSemigroupHomomorphism(hom1bf);
|
|
802
|
+
<2-sided semigroup congruence over <transformation semigroup of size 59,
|
|
803
|
+
degree 5 with 3 generators> with 1 generating pairs>
|
|
804
|
+
gap> BruteForceHomoCheck(hom1bf);
|
|
805
|
+
true
|
|
806
|
+
gap> hom1bfbi := AsSemigroupHomomorphismByImages(hom1bf);
|
|
807
|
+
<transformation semigroup of size 59, degree 5 with 3 generators> ->
|
|
808
|
+
<quotient of <2-sided semigroup congruence over <transformation semigroup
|
|
809
|
+
of size 59, degree 5 with 3 generators> with 1 generating pairs>>
|
|
810
|
+
gap> hom1bfbi = hom1;
|
|
811
|
+
true
|
|
812
|
+
gap> IsSemigroupHomomorphismByImages(hom1bf);
|
|
813
|
+
false
|
|
814
|
+
gap> IsSemigroupHomomorphismByFunction(hom1bf);
|
|
815
|
+
true
|
|
816
|
+
gap> IsSemigroupHomomorphismByImages(hom1);
|
|
817
|
+
true
|
|
818
|
+
gap> IsSemigroupHomomorphismByFunction(hom1);
|
|
819
|
+
false
|
|
820
|
+
gap> IsSurjective(hom1bf);
|
|
821
|
+
true
|
|
822
|
+
|
|
823
|
+
# Simple test for SHBF
|
|
824
|
+
gap> g := Semigroup([(1, 2, 3, 4), (1, 2)]);;
|
|
825
|
+
gap> h := Semigroup([(1, 2, 3), (1, 2)]);;
|
|
826
|
+
gap> hom := SemigroupHomomorphismByFunction(g, h,
|
|
827
|
+
> function(x) if SignPerm(x) = -1 then return (1, 2); else return ();fi;end);
|
|
828
|
+
<semigroup of size 24, with 2 generators> ->
|
|
829
|
+
<semigroup of size 6, with 2 generators>
|
|
830
|
+
gap> ImagesSource(hom);
|
|
831
|
+
[ (), (1,2) ]
|
|
832
|
+
gap> Image(hom, (1, 2, 3, 4));
|
|
833
|
+
(1,2)
|
|
834
|
+
gap> hom := SemigroupIsomorphismByFunction(g, h, x -> (), IdFunc);
|
|
835
|
+
fail
|
|
836
|
+
|
|
837
|
+
# Test with quotient semigroup, but this time SHBF
|
|
838
|
+
gap> S := Semigroup([Transformation([2, 1, 5, 1, 5]),
|
|
839
|
+
> Transformation([1, 1, 1, 5, 3]), Transformation([2, 5, 3, 5, 3])]);;
|
|
840
|
+
gap> congs := CongruencesOfSemigroup(S);;
|
|
841
|
+
gap> cong := congs[4];;
|
|
842
|
+
gap> T := S / cong;;
|
|
843
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
844
|
+
gap> imgs := List(gens, gen -> EquivalenceClassOfElement(cong, gen));;
|
|
845
|
+
gap> hom1 := SemigroupHomomorphismByFunctionNC(S, T, x ->
|
|
846
|
+
> EquivalenceClassOfElement(cong, x));;
|
|
847
|
+
gap> BruteForceHomoCheck(hom1);
|
|
848
|
+
true
|
|
849
|
+
gap> KernelOfSemigroupHomomorphism(hom1);
|
|
850
|
+
<2-sided semigroup congruence over <transformation semigroup of size 59,
|
|
851
|
+
degree 5 with 3 generators> with 1 generating pairs>
|
|
852
|
+
gap> gens[1] ^ hom1 = imgs[1];
|
|
853
|
+
true
|
|
854
|
+
gap> ImageElm(hom1, gens[1]) = imgs[1];
|
|
855
|
+
true
|
|
856
|
+
gap> IsSurjective(hom1);
|
|
857
|
+
true
|
|
858
|
+
gap> IsInjective(hom1);
|
|
859
|
+
false
|
|
860
|
+
gap> hom2 := hom1;;
|
|
861
|
+
gap> hom2 = hom1;
|
|
862
|
+
true
|
|
863
|
+
gap> IsSurjective(hom1);
|
|
864
|
+
true
|
|
865
|
+
gap> IsInjective(hom1);
|
|
866
|
+
false
|
|
867
|
+
gap> IsBijective(hom1);
|
|
868
|
+
false
|
|
869
|
+
gap> IsTotal(hom1);
|
|
870
|
+
true
|
|
871
|
+
gap> IsSingleValued(hom1);
|
|
872
|
+
true
|
|
873
|
+
gap> IsMapping(hom1);
|
|
874
|
+
true
|
|
875
|
+
gap> Range(hom1) = T;
|
|
876
|
+
true
|
|
877
|
+
gap> Source(hom1) = S;
|
|
878
|
+
true
|
|
879
|
+
gap> UnderlyingRelation(hom1);
|
|
880
|
+
<object>
|
|
881
|
+
gap> ImagesSource(hom1) = T;
|
|
882
|
+
true
|
|
883
|
+
gap> ImagesElm(hom1, gens[1]) = [imgs[1]];
|
|
884
|
+
true
|
|
885
|
+
gap> ImagesSet(hom1, [gens[1]]) = [imgs[1]];
|
|
886
|
+
true
|
|
887
|
+
gap> Image(hom1) = T;
|
|
888
|
+
true
|
|
889
|
+
gap> Image(hom1, gens[1]) = imgs[1];
|
|
890
|
+
true
|
|
891
|
+
gap> Image(hom1, [gens[1]]) = [imgs[1]];
|
|
892
|
+
true
|
|
893
|
+
gap> Images(hom1) = T;
|
|
894
|
+
true
|
|
895
|
+
gap> Images(hom1, gens[1]) = [imgs[1]];
|
|
896
|
+
true
|
|
897
|
+
gap> Images(hom1, [gens[1]]) = [imgs[1]];
|
|
898
|
+
true
|
|
899
|
+
gap> PreImagesRange(hom1) = S;
|
|
900
|
+
true
|
|
901
|
+
|
|
902
|
+
#
|
|
903
|
+
gap> PreImageElm(hom1, imgs[1]);
|
|
904
|
+
Error, <map> must be injective and surjective
|
|
905
|
+
gap> PreImagesRepresentative(hom1, imgs[1]);
|
|
906
|
+
Error, no default method for s.p. general mapping
|
|
907
|
+
gap> PreImagesSet(hom1, [imgs[1]]);
|
|
908
|
+
[ Transformation( [ 2, 1, 5, 1, 5 ] ) ]
|
|
909
|
+
gap> PreImage(hom1);
|
|
910
|
+
<transformation semigroup of size 59, degree 5 with 3 generators>
|
|
911
|
+
|
|
912
|
+
#
|
|
913
|
+
gap> PreImage(hom1, imgs[1]);
|
|
914
|
+
Error, <map> must be an injective and surjective mapping
|
|
915
|
+
gap> PreImage(hom1, [imgs[1]]);
|
|
916
|
+
[ Transformation( [ 2, 1, 5, 1, 5 ] ) ]
|
|
917
|
+
gap> PreImages(hom1);
|
|
918
|
+
<transformation semigroup of size 59, degree 5 with 3 generators>
|
|
919
|
+
gap> PreImages(hom1, imgs[1]);
|
|
920
|
+
[ Transformation( [ 2, 1, 5, 1, 5 ] ) ]
|
|
921
|
+
gap> PreImages(hom1, [imgs[1]]);
|
|
922
|
+
[ Transformation( [ 2, 1, 5, 1, 5 ] ) ]
|
|
923
|
+
|
|
924
|
+
# Test with jumbled generators
|
|
925
|
+
gap> S := Semigroup([Transformation([2, 1, 5, 1, 5]),
|
|
926
|
+
> Transformation([1, 1, 1, 5, 3]),
|
|
927
|
+
> Transformation([2, 5, 3, 5, 3])]);;
|
|
928
|
+
gap> gens1 := GeneratorsOfSemigroup(S);;
|
|
929
|
+
gap> cong := SemigroupCongruence(S,
|
|
930
|
+
> [[Transformation([1, 1, 1, 5, 3]), Transformation([2, 5, 3, 5, 3])],
|
|
931
|
+
> [Transformation([1, 2, 5, 2, 5]), Transformation([2, 1, 5, 1, 5])]]);
|
|
932
|
+
<2-sided semigroup congruence over <transformation semigroup of degree 5 with
|
|
933
|
+
3 generators> with 2 generating pairs>
|
|
934
|
+
gap> T := S / cong;;
|
|
935
|
+
gap> images1 := List(gens1, gen -> EquivalenceClassOfElement(cong, gen));;
|
|
936
|
+
gap> hom1 := SemigroupHomomorphismByImages_NC(S, T, gens1, images1);;
|
|
937
|
+
gap> BruteForceHomoCheck(hom1);
|
|
938
|
+
true
|
|
939
|
+
gap> map := IsomorphismTransformationSemigroup(ImagesSource(hom1));;
|
|
940
|
+
gap> K := Range(map);;
|
|
941
|
+
gap> images2 := GeneratorsOfSemigroup(K);;
|
|
942
|
+
gap> hom2 := SemigroupHomomorphismByImages(S, K, gens1, images2);;
|
|
943
|
+
gap> BruteForceHomoCheck(hom1);
|
|
944
|
+
true
|
|
945
|
+
gap> gens1;
|
|
946
|
+
[ Transformation( [ 2, 1, 5, 1, 5 ] ), Transformation( [ 1, 1, 1, 5, 3 ] ),
|
|
947
|
+
Transformation( [ 2, 5, 3, 5, 3 ] ) ]
|
|
948
|
+
gap> gens2 := [gens1[3], gens1[1], gens1[2]];
|
|
949
|
+
[ Transformation( [ 2, 5, 3, 5, 3 ] ), Transformation( [ 2, 1, 5, 1, 5 ] ),
|
|
950
|
+
Transformation( [ 1, 1, 1, 5, 3 ] ) ]
|
|
951
|
+
gap> images2 := [images2[3], images2[1], images2[2]];;
|
|
952
|
+
gap> hom3 := SemigroupHomomorphismByImages(S, K, gens2, images2);;
|
|
953
|
+
gap> BruteForceHomoCheck(hom3);
|
|
954
|
+
true
|
|
955
|
+
gap> EvalString(String(hom3)) = hom3;
|
|
956
|
+
true
|
|
957
|
+
|
|
958
|
+
# Test with FP Semigroup with relations added
|
|
959
|
+
gap> S := AsSemigroup(IsFpSemigroup, Semigroup([Transformation([2, 1, 5, 1, 5]),
|
|
960
|
+
> Transformation([1, 1, 1, 5, 3]), Transformation([2, 5, 3, 5, 3])]));;
|
|
961
|
+
gap> gens := GeneratorsOfSemigroup(S);;
|
|
962
|
+
gap> relations := [[gens[1], gens[2]]];;
|
|
963
|
+
gap> T := S / relations;;
|
|
964
|
+
gap> imgs := GeneratorsOfSemigroup(T);;
|
|
965
|
+
gap> hom := SemigroupHomomorphismByImages(S, T, gens, imgs);
|
|
966
|
+
<fp semigroup with 3 generators and 34 relations of length 225> ->
|
|
967
|
+
<fp semigroup with 3 generators and 35 relations of length 227>
|
|
968
|
+
gap> gens[1] ^ hom;
|
|
969
|
+
s1
|
|
970
|
+
gap> gens[2] ^ hom;
|
|
971
|
+
s2
|
|
972
|
+
gap> KernelOfSemigroupHomomorphism(hom);
|
|
973
|
+
<universal semigroup congruence over <fp semigroup with 3 generators and
|
|
974
|
+
34 relations of length 225>>
|
|
975
|
+
|
|
976
|
+
# Test with huge transformation semigroup
|
|
977
|
+
gap> S := Semigroup(FullTransformationMonoid(9), rec(acting := true));;
|
|
978
|
+
gap> T := Semigroup(FullTransformationMonoid(1), rec(acting := true));;
|
|
979
|
+
gap> hom := SemigroupHomomorphismByImages(S, T, GeneratorsOfSemigroup(S), List(GeneratorsOfSemigroup(S), x -> T.1));
|
|
980
|
+
<transformation monoid of size 387420489, degree 9 with 3 generators> ->
|
|
981
|
+
<trivial transformation group of degree 0 with 1 generator>
|
|
982
|
+
|
|
983
|
+
# Test for IsGeneratorsOfInverseSemigroup
|
|
984
|
+
gap> S := MonogenicSemigroup(IsTransformationSemigroup, 1, 3);
|
|
985
|
+
<transformation group of size 3, degree 3 with 1 generator>
|
|
986
|
+
gap> T := InverseSemigroup(MonogenicSemigroup(IsPartialPermSemigroup, 1, 3));
|
|
987
|
+
<partial perm group of rank 3 with 1 generator>
|
|
988
|
+
gap> hom := SemigroupHomomorphismByImages(S, T, [S.1 ^ 2], [T.1]);
|
|
989
|
+
<transformation group of size 3, degree 3 with 1 generator> ->
|
|
990
|
+
<partial perm group of rank 3 with 1 generator>
|
|
991
|
+
|
|
992
|
+
# SemigroupIsomorphismByImages non-bijective homom.
|
|
993
|
+
gap> S := FullTransformationMonoid(3);;
|
|
994
|
+
gap> T := FullTransformationSemigroup(2);;
|
|
995
|
+
gap> SemigroupIsomorphismByImages(S, T, GeneratorsOfSemigroup(S),
|
|
996
|
+
> List([1 .. 4], x -> ConstantTransformation(2, 1)));
|
|
997
|
+
fail
|
|
998
|
+
gap> SemigroupIsomorphismByImagesNC(S, T, GeneratorsOfSemigroup(S),
|
|
999
|
+
> List([1 .. 4], x -> ConstantTransformation(2, 1)));
|
|
1000
|
+
<full transformation monoid of degree 3> ->
|
|
1001
|
+
<full transformation monoid of degree 2>
|
|
1002
|
+
|
|
1003
|
+
# SemigroupHomomorphismByFunction non-homomorphism
|
|
1004
|
+
gap> S := FullTransformationMonoid(3);;
|
|
1005
|
+
gap> T := FullTransformationSemigroup(3);;
|
|
1006
|
+
gap> SemigroupHomomorphismByFunction(S, T, x -> AsTransformation((1, 2, 3)));
|
|
1007
|
+
fail
|
|
1008
|
+
|
|
1009
|
+
# SemigroupIsomorphismByFunction inverse not a homomorphism
|
|
1010
|
+
gap> S := FullTransformationMonoid(3);;
|
|
1011
|
+
gap> T := FullTransformationSemigroup(3);;
|
|
1012
|
+
gap> SemigroupIsomorphismByFunction(S,
|
|
1013
|
+
> T,
|
|
1014
|
+
> x -> x,
|
|
1015
|
+
> x -> AsTransformation((1, 2, 3)));
|
|
1016
|
+
fail
|
|
1017
|
+
|
|
1018
|
+
# SemigroupIsomorphismByFunction inverse not inverse
|
|
1019
|
+
gap> S := FullTransformationMonoid(3);;
|
|
1020
|
+
gap> T := FullTransformationSemigroup(3);;
|
|
1021
|
+
gap> SemigroupIsomorphismByFunction(S,
|
|
1022
|
+
> T,
|
|
1023
|
+
> x -> x,
|
|
1024
|
+
> x -> x ^ (1, 2));
|
|
1025
|
+
fail
|
|
1026
|
+
gap> S := FullTransformationMonoid(3);;
|
|
1027
|
+
gap> T := FullTransformationSemigroup(3);;
|
|
1028
|
+
gap> SemigroupIsomorphismByFunction(S,
|
|
1029
|
+
> T,
|
|
1030
|
+
> x -> x ^ (1, 2),
|
|
1031
|
+
> x -> x);
|
|
1032
|
+
fail
|
|
1033
|
+
|
|
1034
|
+
# InverseGeneralMapping for a semigroup homomorphism that happens to be an
|
|
1035
|
+
# isomorphism
|
|
1036
|
+
gap> S := Semigroup(PBR([[-2], [-2]], [[], [1, 2]]));
|
|
1037
|
+
<commutative pbr semigroup of degree 2 with 1 generator>
|
|
1038
|
+
gap> map := IsomorphismPartialPermSemigroup(S);
|
|
1039
|
+
<trivial pbr group of degree 2 with 1 generator> ->
|
|
1040
|
+
<trivial partial perm group of rank 1 with 1 generator>
|
|
1041
|
+
gap> IsBijective(map);
|
|
1042
|
+
true
|
|
1043
|
+
gap> BruteForceInverseCheck(map);
|
|
1044
|
+
true
|
|
1045
|
+
|
|
1046
|
+
# ImagesRepresentative for semigroups homomorphism by images
|
|
1047
|
+
gap> S := MonogenicSemigroup(IsTransformationSemigroup, 1, 3);
|
|
1048
|
+
<transformation group of size 3, degree 3 with 1 generator>
|
|
1049
|
+
gap> T := InverseSemigroup(MonogenicSemigroup(IsPartialPermSemigroup, 1, 3));
|
|
1050
|
+
<partial perm group of rank 3 with 1 generator>
|
|
1051
|
+
gap> hom := SemigroupHomomorphismByImages(S, T, [S.1 ^ 2], [T.1]);
|
|
1052
|
+
<transformation group of size 3, degree 3 with 1 generator> ->
|
|
1053
|
+
<partial perm group of rank 3 with 1 generator>
|
|
1054
|
+
gap> ImagesRepresentative(hom, S.1);
|
|
1055
|
+
(1,3,2)
|
|
1056
|
+
gap> ImagesRepresentative(hom, ConstantTransformation(3, 1));
|
|
1057
|
+
Error, the 2nd argument is not an element of the source of the 1st argument (s\
|
|
1058
|
+
emigroup homom. by images)
|
|
1059
|
+
|
|
1060
|
+
# KernelOfSemigroupHomomorphism for non-quotient semigroup
|
|
1061
|
+
gap> S := Semigroup(Transformation([2, 1, 5, 1, 5]),
|
|
1062
|
+
> Transformation([1, 1, 1, 5, 3]),
|
|
1063
|
+
> Transformation([2, 5, 3, 5, 3]));;
|
|
1064
|
+
gap> cong := SemigroupCongruence(S,
|
|
1065
|
+
> [[Transformation([1, 1, 1, 1, 1]), Transformation([1, 1, 1, 3, 3])]]);
|
|
1066
|
+
<2-sided semigroup congruence over <transformation semigroup of degree 5 with
|
|
1067
|
+
3 generators> with 1 generating pairs>
|
|
1068
|
+
gap> T := AsSemigroup(IsTransformationSemigroup, S / cong);;
|
|
1069
|
+
gap> hom := SemigroupHomomorphismByImages(S, T);;
|
|
1070
|
+
gap> KernelOfSemigroupHomomorphism(hom);
|
|
1071
|
+
<2-sided semigroup congruence over <transformation semigroup of size 59,
|
|
1072
|
+
degree 5 with 3 generators> with 1 generating pairs>
|
|
1073
|
+
gap> KernelOfSemigroupHomomorphism(hom) = cong;
|
|
1074
|
+
true
|
|
1075
|
+
|
|
1076
|
+
# Equality for semigroup homomorphisms
|
|
1077
|
+
gap> S := Semigroup(Transformation([2, 1, 5, 1, 5]),
|
|
1078
|
+
> Transformation([1, 1, 1, 5, 3]),
|
|
1079
|
+
> Transformation([2, 5, 3, 5, 3]));;
|
|
1080
|
+
gap> hom1 := SemigroupHomomorphismByImages(S, S, GeneratorsOfSemigroup(S),
|
|
1081
|
+
> List(GeneratorsOfSemigroup(S), x -> Idempotents(S)[1]));;
|
|
1082
|
+
gap> hom2 := SemigroupHomomorphismByImages(S, S, GeneratorsOfSemigroup(S),
|
|
1083
|
+
> List(GeneratorsOfSemigroup(S), x -> Idempotents(S)[2]));;
|
|
1084
|
+
gap> hom1 = hom2;
|
|
1085
|
+
false
|
|
1086
|
+
|
|
1087
|
+
# Unbind local variables, auto-generated by etc/tst-unbind-local-vars.py
|
|
1088
|
+
gap> Unbind(BruteForceHomoCheck);
|
|
1089
|
+
gap> Unbind(BruteForceInverseCheck);
|
|
1090
|
+
gap> Unbind(BruteForceIsoCheck);
|
|
1091
|
+
gap> Unbind(F);
|
|
1092
|
+
gap> Unbind(J);
|
|
1093
|
+
gap> Unbind(K);
|
|
1094
|
+
gap> Unbind(S);
|
|
1095
|
+
gap> Unbind(T);
|
|
1096
|
+
gap> Unbind(U);
|
|
1097
|
+
gap> Unbind(V);
|
|
1098
|
+
gap> Unbind(acting);
|
|
1099
|
+
gap> Unbind(cong);
|
|
1100
|
+
gap> Unbind(congs);
|
|
1101
|
+
gap> Unbind(g);
|
|
1102
|
+
gap> Unbind(gens);
|
|
1103
|
+
gap> Unbind(gens1);
|
|
1104
|
+
gap> Unbind(gens2);
|
|
1105
|
+
gap> Unbind(gens3);
|
|
1106
|
+
gap> Unbind(gensS);
|
|
1107
|
+
gap> Unbind(gensT);
|
|
1108
|
+
gap> Unbind(gensU);
|
|
1109
|
+
gap> Unbind(gensV);
|
|
1110
|
+
gap> Unbind(h);
|
|
1111
|
+
gap> Unbind(hom);
|
|
1112
|
+
gap> Unbind(hom1);
|
|
1113
|
+
gap> Unbind(hom1bf);
|
|
1114
|
+
gap> Unbind(hom1bfbi);
|
|
1115
|
+
gap> Unbind(hom2);
|
|
1116
|
+
gap> Unbind(hom3);
|
|
1117
|
+
gap> Unbind(images);
|
|
1118
|
+
gap> Unbind(images1);
|
|
1119
|
+
gap> Unbind(images2);
|
|
1120
|
+
gap> Unbind(images3);
|
|
1121
|
+
gap> Unbind(imgs);
|
|
1122
|
+
gap> Unbind(imgs2);
|
|
1123
|
+
gap> Unbind(inv);
|
|
1124
|
+
gap> Unbind(iso);
|
|
1125
|
+
gap> Unbind(j);
|
|
1126
|
+
gap> Unbind(map);
|
|
1127
|
+
gap> Unbind(relations);
|
|
1128
|
+
gap> Unbind(x);
|
|
1129
|
+
gap> Unbind(y);
|
|
1130
|
+
gap> Unbind(z);
|
|
1131
|
+
|
|
1132
|
+
#
|
|
1133
|
+
gap> SEMIGROUPS.StopTest();
|
|
1134
|
+
gap> STOP_TEST("Semigroups package: standard/attributes/homomorph.tst");
|