passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-macosx_14_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-gap-pkg-semigroups might be problematic. Click here for more details.
- gap/pkg/semigroups/CHANGELOG.md +1699 -0
- gap/pkg/semigroups/CONTRIBUTING.md +91 -0
- gap/pkg/semigroups/GNUmakefile +110 -0
- gap/pkg/semigroups/GNUmakefile.in +110 -0
- gap/pkg/semigroups/GPL +674 -0
- gap/pkg/semigroups/LICENSE +16 -0
- gap/pkg/semigroups/Makefile +26 -0
- gap/pkg/semigroups/Makefile.gappkg +225 -0
- gap/pkg/semigroups/PackageInfo.g +529 -0
- gap/pkg/semigroups/README.md +102 -0
- gap/pkg/semigroups/VERSIONS +112 -0
- gap/pkg/semigroups/aclocal.m4 +375 -0
- gap/pkg/semigroups/autogen.sh +25 -0
- gap/pkg/semigroups/bin/aarch64-apple-darwin23-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1157 -0
- gap/pkg/semigroups/config.status +1132 -0
- gap/pkg/semigroups/config.sub +1960 -0
- gap/pkg/semigroups/configure +9742 -0
- gap/pkg/semigroups/configure.ac +71 -0
- gap/pkg/semigroups/data/doc/greens.pickle +1 -0
- gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
- gap/pkg/semigroups/data/tst/bipart4 +10 -0
- gap/pkg/semigroups/data/tst/pperm10 +1 -0
- gap/pkg/semigroups/data/tst/tables.gz +0 -0
- gap/pkg/semigroups/data/tst/testdata +1 -0
- gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
- gap/pkg/semigroups/data/tst/trans3 +7 -0
- gap/pkg/semigroups/data/tst/trans3-old +7 -0
- gap/pkg/semigroups/environment.yml +7 -0
- gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
- gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
- gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
- gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
- gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
- gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
- gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
- gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
- gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
- gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
- gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
- gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
- gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
- gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
- gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
- gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
- gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
- gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
- gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
- gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
- gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
- gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
- gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
- gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
- gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
- gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
- gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
- gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
- gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
- gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
- gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
- gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
- gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
- gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
- gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
- gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
- gap/pkg/semigroups/gap/elements/elements.gd +11 -0
- gap/pkg/semigroups/gap/elements/elements.gi +121 -0
- gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
- gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
- gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
- gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
- gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
- gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
- gap/pkg/semigroups/gap/elements/star.gd +21 -0
- gap/pkg/semigroups/gap/elements/star.gi +21 -0
- gap/pkg/semigroups/gap/elements/trans.gd +13 -0
- gap/pkg/semigroups/gap/elements/trans.gi +50 -0
- gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
- gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
- gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
- gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
- gap/pkg/semigroups/gap/fp/word.gd +15 -0
- gap/pkg/semigroups/gap/fp/word.gi +67 -0
- gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
- gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
- gap/pkg/semigroups/gap/greens/acting.gd +81 -0
- gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
- gap/pkg/semigroups/gap/greens/generic.gd +117 -0
- gap/pkg/semigroups/gap/greens/generic.gi +630 -0
- gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
- gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
- gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
- gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
- gap/pkg/semigroups/gap/main/acting.gd +36 -0
- gap/pkg/semigroups/gap/main/acting.gi +779 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
- gap/pkg/semigroups/gap/main/graded.gd +26 -0
- gap/pkg/semigroups/gap/main/graded.gi +355 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
- gap/pkg/semigroups/gap/main/orbits.gd +24 -0
- gap/pkg/semigroups/gap/main/orbits.gi +512 -0
- gap/pkg/semigroups/gap/main/semiact.gd +20 -0
- gap/pkg/semigroups/gap/main/semiact.gi +821 -0
- gap/pkg/semigroups/gap/main/setup.gd +61 -0
- gap/pkg/semigroups/gap/main/setup.gi +1094 -0
- gap/pkg/semigroups/gap/obsolete.gd +9 -0
- gap/pkg/semigroups/gap/obsolete.gi +14 -0
- gap/pkg/semigroups/gap/options.g +55 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
- gap/pkg/semigroups/gap/tools/display.gd +24 -0
- gap/pkg/semigroups/gap/tools/display.gi +749 -0
- gap/pkg/semigroups/gap/tools/io.gd +17 -0
- gap/pkg/semigroups/gap/tools/io.gi +543 -0
- gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
- gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
- gap/pkg/semigroups/gap/tools/utils.gd +19 -0
- gap/pkg/semigroups/gap/tools/utils.gi +756 -0
- gap/pkg/semigroups/gapbind14/.ccls +18 -0
- gap/pkg/semigroups/gapbind14/.clang-format +104 -0
- gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
- gap/pkg/semigroups/gapbind14/LICENSE +674 -0
- gap/pkg/semigroups/gapbind14/README.md +76 -0
- gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
- gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
- gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
- gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
- gap/pkg/semigroups/gapbind14/demo/configure +34 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
- gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
- gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
- gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
- gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
- gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
- gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
- gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
- gap/pkg/semigroups/init.g +150 -0
- gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
- gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
- gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
- gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
- gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
- gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
- gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
- gap/pkg/semigroups/m4/find_gap.m4 +94 -0
- gap/pkg/semigroups/makedoc.g +153 -0
- gap/pkg/semigroups/prerequisites.sh +62 -0
- gap/pkg/semigroups/read.g +105 -0
- gap/pkg/semigroups/release.toml +6 -0
- gap/pkg/semigroups/tst/extreme/README +2 -0
- gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
- gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
- gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
- gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
- gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
- gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
- gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
- gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
- gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
- gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
- gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
- gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
- gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
- gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
- gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
- gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
- gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
- gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
- gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
- gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
- gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
- gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
- gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
- gap/pkg/semigroups/tst/standard/README +2 -0
- gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
- gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
- gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
- gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
- gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
- gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
- gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
- gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
- gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
- gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
- gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
- gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
- gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
- gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
- gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
- gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
- gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
- gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
- gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
- gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
- gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
- gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
- gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
- gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
- gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
- gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
- gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
- gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
- gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
- gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
- gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
- gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
- gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
- gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
- gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
- gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
- gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
- gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
- gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
- gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
- gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
- gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
- gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
- gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
- gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
- gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
- gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
- gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
- gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
- gap/pkg/semigroups/tst/standard/options.tst +54 -0
- gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
- gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
- gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
- gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
- gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
- gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
- gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
- gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
- gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
- gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
- gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
- gap/pkg/semigroups/tst/testinstall.tst +1815 -0
- gap/pkg/semigroups/tst/teststandard.g +22 -0
- gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
- gap/pkg/semigroups/tst/workspaces/load.g +11 -0
- gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
- gap/pkg/semigroups/tst/workspaces/save.g +14 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA +93 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +354 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +6 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
- passagemath_gap_pkg_semigroups.dylibs/libsemigroups.2.dylib +0 -0
- sage/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/gap_pkg_semigroups.abi3.so +0 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## homomorph.gd
|
|
4
|
+
## 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
|
+
DeclareCategory("IsSemigroupHomomorphismByImagesOrFunction",
|
|
13
|
+
IsSemigroupGeneralMapping
|
|
14
|
+
and IsSingleValued
|
|
15
|
+
and IsTotal
|
|
16
|
+
and IsAttributeStoringRep,
|
|
17
|
+
[]);
|
|
18
|
+
|
|
19
|
+
DeclareRepresentation("IsSemigroupHomomorphismByImages",
|
|
20
|
+
IsSPGeneralMapping
|
|
21
|
+
and IsSemigroupHomomorphismByImagesOrFunction,
|
|
22
|
+
[]);
|
|
23
|
+
|
|
24
|
+
DeclareRepresentation("IsSemigroupHomomorphismByFunction",
|
|
25
|
+
IsSPMappingByFunctionRep
|
|
26
|
+
and IsSemigroupHomomorphismByImagesOrFunction,
|
|
27
|
+
[]);
|
|
28
|
+
|
|
29
|
+
DeclareRepresentation("IsSemigroupIsomorphismByFunction",
|
|
30
|
+
IsSemigroupHomomorphismByFunction
|
|
31
|
+
and IsBijective
|
|
32
|
+
and IsSPMappingByFunctionWithInverseRep,
|
|
33
|
+
[]);
|
|
34
|
+
|
|
35
|
+
# This operation is not called SemigroupHomomorphismByImagesNC because that
|
|
36
|
+
# name is used in the main GAP library
|
|
37
|
+
|
|
38
|
+
DeclareOperation("SemigroupHomomorphismByImages_NC",
|
|
39
|
+
[IsSemigroup, IsSemigroup, IsList, IsList]);
|
|
40
|
+
DeclareOperation("SemigroupHomomorphismByImages",
|
|
41
|
+
[IsSemigroup, IsSemigroup, IsList, IsList]);
|
|
42
|
+
DeclareOperation("SemigroupHomomorphismByImages",
|
|
43
|
+
[IsSemigroup, IsSemigroup, IsList]);
|
|
44
|
+
DeclareOperation("SemigroupHomomorphismByImages",
|
|
45
|
+
[IsSemigroup, IsSemigroup]);
|
|
46
|
+
DeclareOperation("SemigroupHomomorphismByImages",
|
|
47
|
+
[IsSemigroup, IsList, IsList]);
|
|
48
|
+
|
|
49
|
+
DeclareOperation("SemigroupIsomorphismByImagesNC",
|
|
50
|
+
[IsSemigroup, IsSemigroup, IsList, IsList]);
|
|
51
|
+
DeclareOperation("SemigroupIsomorphismByImages",
|
|
52
|
+
[IsSemigroup, IsSemigroup, IsList, IsList]);
|
|
53
|
+
DeclareOperation("SemigroupIsomorphismByImages",
|
|
54
|
+
[IsSemigroup, IsSemigroup, IsList]);
|
|
55
|
+
DeclareOperation("SemigroupIsomorphismByImages",
|
|
56
|
+
[IsSemigroup, IsSemigroup]);
|
|
57
|
+
DeclareOperation("SemigroupIsomorphismByImages",
|
|
58
|
+
[IsSemigroup, IsList, IsList]);
|
|
59
|
+
|
|
60
|
+
DeclareOperation("SemigroupIsomorphismByFunctionNC",
|
|
61
|
+
[IsSemigroup, IsSemigroup, IsFunction, IsFunction]);
|
|
62
|
+
DeclareOperation("SemigroupIsomorphismByFunction",
|
|
63
|
+
[IsSemigroup, IsSemigroup, IsFunction, IsFunction]);
|
|
64
|
+
|
|
65
|
+
DeclareOperation("SemigroupHomomorphismByFunctionNC",
|
|
66
|
+
[IsSemigroup, IsSemigroup, IsFunction]);
|
|
67
|
+
DeclareOperation("SemigroupHomomorphismByFunction",
|
|
68
|
+
[IsSemigroup, IsSemigroup, IsFunction]);
|
|
69
|
+
|
|
70
|
+
DeclareAttribute("KernelOfSemigroupHomomorphism", IsSemigroupHomomorphism);
|
|
71
|
+
|
|
72
|
+
DeclareOperation("AsSemigroupHomomorphismByFunction",
|
|
73
|
+
[IsSemigroupHomomorphismByImages]);
|
|
74
|
+
DeclareOperation("AsSemigroupHomomorphismByFunction",
|
|
75
|
+
[IsSemigroupHomomorphismByFunction]);
|
|
76
|
+
DeclareOperation("AsSemigroupHomomorphismByImages",
|
|
77
|
+
[IsSemigroupHomomorphismByFunction]);
|
|
78
|
+
DeclareOperation("AsSemigroupHomomorphismByImages",
|
|
79
|
+
[IsSemigroupHomomorphismByImages]);
|
|
80
|
+
|
|
81
|
+
DeclareOperation("AsSemigroupIsomorphismByFunction",
|
|
82
|
+
[IsSemigroupHomomorphismByImages]);
|
|
83
|
+
DeclareOperation("AsSemigroupIsomorphismByFunction",
|
|
84
|
+
[IsSemigroupIsomorphismByFunction]);
|
|
@@ -0,0 +1,591 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## homomorph.gi
|
|
4
|
+
## 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
|
+
# This file contains various methods for representing homomorphisms between
|
|
13
|
+
# semigroups
|
|
14
|
+
|
|
15
|
+
InstallMethod(SemigroupHomomorphismByImages,
|
|
16
|
+
"for two semigroups and two lists",
|
|
17
|
+
[IsSemigroup, IsSemigroup, IsList, IsList],
|
|
18
|
+
function(S, T, gens, imgs)
|
|
19
|
+
local original_gens, U, map, R, rel;
|
|
20
|
+
|
|
21
|
+
if not ForAll(gens, x -> x in S) then
|
|
22
|
+
ErrorNoReturn("the 3rd argument (a list) must consist of elements ",
|
|
23
|
+
"of the 1st argument (a semigroup)");
|
|
24
|
+
elif Semigroup(gens) <> S then
|
|
25
|
+
ErrorNoReturn("the 1st argument (a semigroup) is not generated by ",
|
|
26
|
+
"the 3rd argument (a list)");
|
|
27
|
+
elif not ForAll(imgs, x -> x in T) then
|
|
28
|
+
ErrorNoReturn("the 4th argument (a list) must consist of elements ",
|
|
29
|
+
"of the 2nd argument (a semigroup)");
|
|
30
|
+
elif Size(gens) <> Size(imgs) then
|
|
31
|
+
ErrorNoReturn("the 3rd argument (a list) and the 4th argument ",
|
|
32
|
+
"(a list) are not the same size");
|
|
33
|
+
fi;
|
|
34
|
+
|
|
35
|
+
# in case of different generators, do:
|
|
36
|
+
# gens -> original generators (as passed to Semigroup function)
|
|
37
|
+
# imgs -> images of original generators
|
|
38
|
+
original_gens := GeneratorsOfSemigroup(S);
|
|
39
|
+
if original_gens <> gens then
|
|
40
|
+
U := Semigroup(gens);
|
|
41
|
+
# Use MinimalFactorization rather than Factorization because
|
|
42
|
+
# MinimalFactorization is guaranteed to return a list of positive integers,
|
|
43
|
+
# but Factorization is not (i.e. if S is an inverse acting semigroup.
|
|
44
|
+
# Also since we require an IsomorphismFpSemigroup, there's no additional
|
|
45
|
+
# cost to using MinimalFactorization instead of Factorization.
|
|
46
|
+
imgs := List(original_gens,
|
|
47
|
+
x -> EvaluateWord(imgs, MinimalFactorization(U, x)));
|
|
48
|
+
gens := original_gens;
|
|
49
|
+
fi;
|
|
50
|
+
|
|
51
|
+
# maps S to a finitely presented semigroup
|
|
52
|
+
map := IsomorphismFpSemigroup(S); # S (source) -> fp semigroup (range)
|
|
53
|
+
# List of relations of the above finitely presented semigroup (hence of S)
|
|
54
|
+
R := RelationsOfFpSemigroup(Range(map));
|
|
55
|
+
|
|
56
|
+
# check that each relation is satisfied by the elements imgs
|
|
57
|
+
for rel in R do
|
|
58
|
+
rel := List(rel, x -> SEMIGROUPS.ExtRepObjToWord(ExtRepOfObj(x)));
|
|
59
|
+
if EvaluateWord(imgs, rel[1]) <> EvaluateWord(imgs, rel[2]) then
|
|
60
|
+
return fail;
|
|
61
|
+
fi;
|
|
62
|
+
od;
|
|
63
|
+
|
|
64
|
+
return SemigroupHomomorphismByImages_NC(S, T, gens, imgs);
|
|
65
|
+
end);
|
|
66
|
+
|
|
67
|
+
InstallMethod(SemigroupHomomorphismByImages,
|
|
68
|
+
"for two transformation semigroups and two transformation collections",
|
|
69
|
+
[IsTransformationSemigroup and IsActingSemigroup,
|
|
70
|
+
IsTransformationSemigroup and IsActingSemigroup,
|
|
71
|
+
IsTransformationCollection and IsList,
|
|
72
|
+
IsTransformationCollection and IsList],
|
|
73
|
+
function(S, T, gens, imgs)
|
|
74
|
+
local original_gens, U, S1, T1, SxT, embS, embT, K, i;
|
|
75
|
+
|
|
76
|
+
if not ForAll(gens, x -> x in S) then
|
|
77
|
+
ErrorNoReturn("the 3rd argument (a list) must consist of elements ",
|
|
78
|
+
"of the 1st argument (a semigroup)");
|
|
79
|
+
elif Semigroup(gens) <> S then
|
|
80
|
+
ErrorNoReturn("the 1st argument (a semigroup) is not generated by ",
|
|
81
|
+
"the 3rd argument (a list)");
|
|
82
|
+
elif not ForAll(imgs, x -> x in T) then
|
|
83
|
+
ErrorNoReturn("the 4th argument (a list) must consist of elements ",
|
|
84
|
+
"of the 2nd argument (a semigroup)");
|
|
85
|
+
elif Size(gens) <> Size(imgs) then
|
|
86
|
+
ErrorNoReturn("the 3rd argument (a list) and the 4th argument ",
|
|
87
|
+
"(a list) are not the same size");
|
|
88
|
+
fi;
|
|
89
|
+
|
|
90
|
+
# in case of different generators, do:
|
|
91
|
+
# gens -> original generators (as passed to Semigroup function)
|
|
92
|
+
# imgs -> images of original generators
|
|
93
|
+
original_gens := GeneratorsOfSemigroup(S);
|
|
94
|
+
if original_gens <> gens then
|
|
95
|
+
U := Semigroup(gens, rec(acting := true));
|
|
96
|
+
# Use Factorization not MinimalFactorization because it might be quicker,
|
|
97
|
+
# and there's no danger of negative numbers since S and T are both
|
|
98
|
+
# transformation semigroups.
|
|
99
|
+
imgs := List(original_gens, x -> EvaluateWord(imgs, Factorization(U, x)));
|
|
100
|
+
gens := original_gens;
|
|
101
|
+
fi;
|
|
102
|
+
|
|
103
|
+
if not IsMonoidAsSemigroup(S) then
|
|
104
|
+
S1 := Monoid(S);
|
|
105
|
+
else
|
|
106
|
+
S1 := S;
|
|
107
|
+
fi;
|
|
108
|
+
|
|
109
|
+
if not IsMonoidAsSemigroup(T) then
|
|
110
|
+
T1 := Monoid(T);
|
|
111
|
+
else
|
|
112
|
+
T1 := T;
|
|
113
|
+
fi;
|
|
114
|
+
|
|
115
|
+
SxT := DirectProduct(S1, T1);
|
|
116
|
+
embS := Embedding(SxT, 1);
|
|
117
|
+
embT := Embedding(SxT, 2);
|
|
118
|
+
K := [];
|
|
119
|
+
|
|
120
|
+
for i in [1 .. Size(gens)] do
|
|
121
|
+
Add(K, gens[i] ^ embS * imgs[i] ^ embT);
|
|
122
|
+
od;
|
|
123
|
+
K := Semigroup(K, rec(acting := true));
|
|
124
|
+
|
|
125
|
+
# TODO(later) stop this loop as soon as K exceeds S in size:
|
|
126
|
+
if Size(K) <> Size(S) then
|
|
127
|
+
return fail;
|
|
128
|
+
fi;
|
|
129
|
+
return SemigroupHomomorphismByImages_NC(S, T, gens, imgs);
|
|
130
|
+
end);
|
|
131
|
+
|
|
132
|
+
InstallMethod(SemigroupHomomorphismByImages, "for two semigroups and one list",
|
|
133
|
+
[IsSemigroup, IsSemigroup, IsList],
|
|
134
|
+
{S, T, imgs}
|
|
135
|
+
-> SemigroupHomomorphismByImages(S, T, GeneratorsOfSemigroup(S), imgs));
|
|
136
|
+
|
|
137
|
+
InstallMethod(SemigroupHomomorphismByImages, "for two semigroups",
|
|
138
|
+
[IsSemigroup, IsSemigroup],
|
|
139
|
+
function(S, T)
|
|
140
|
+
return SemigroupHomomorphismByImages(S,
|
|
141
|
+
T,
|
|
142
|
+
GeneratorsOfSemigroup(S),
|
|
143
|
+
GeneratorsOfSemigroup(T));
|
|
144
|
+
end);
|
|
145
|
+
|
|
146
|
+
InstallMethod(SemigroupHomomorphismByImages, "for a semigroup and two lists",
|
|
147
|
+
[IsSemigroup, IsList, IsList],
|
|
148
|
+
{S, gens, imgs}
|
|
149
|
+
-> SemigroupHomomorphismByImages(S, Semigroup(imgs), gens, imgs));
|
|
150
|
+
|
|
151
|
+
InstallMethod(SemigroupIsomorphismByImages, "for two semigroup and two lists",
|
|
152
|
+
[IsSemigroup, IsSemigroup, IsList, IsList],
|
|
153
|
+
function(S, T, gens, imgs)
|
|
154
|
+
local hom;
|
|
155
|
+
# TODO(Homomorph): we could check for other isomorphism invariants here, like
|
|
156
|
+
# we require that gens, and imgs are duplicate free for example, and that S
|
|
157
|
+
# and T have the same size etc
|
|
158
|
+
hom := SemigroupHomomorphismByImages(S, T, gens, imgs);
|
|
159
|
+
if hom <> fail and IsBijective(hom) then
|
|
160
|
+
return hom;
|
|
161
|
+
fi;
|
|
162
|
+
return fail;
|
|
163
|
+
end);
|
|
164
|
+
|
|
165
|
+
InstallMethod(SemigroupIsomorphismByImagesNC, "for two semigroup and two lists",
|
|
166
|
+
[IsSemigroup, IsSemigroup, IsList, IsList],
|
|
167
|
+
function(S, T, gens, imgs)
|
|
168
|
+
local iso;
|
|
169
|
+
iso := Objectify(NewType(GeneralMappingsFamily(ElementsFamily(FamilyObj(S)),
|
|
170
|
+
ElementsFamily(FamilyObj(T))),
|
|
171
|
+
IsSemigroupHomomorphismByImages and IsBijective),
|
|
172
|
+
rec());
|
|
173
|
+
SetSource(iso, S);
|
|
174
|
+
SetRange(iso, T);
|
|
175
|
+
SetMappingGeneratorsImages(iso, [Immutable(gens), Immutable(imgs)]);
|
|
176
|
+
return iso;
|
|
177
|
+
end);
|
|
178
|
+
|
|
179
|
+
InstallMethod(SemigroupIsomorphismByImages, "for two semigroups and one list",
|
|
180
|
+
[IsSemigroup, IsSemigroup, IsList],
|
|
181
|
+
{S, T, imgs}
|
|
182
|
+
-> SemigroupIsomorphismByImages(S, T, GeneratorsOfSemigroup(S), imgs));
|
|
183
|
+
|
|
184
|
+
InstallMethod(SemigroupIsomorphismByImages, "for two semigroups",
|
|
185
|
+
[IsSemigroup, IsSemigroup],
|
|
186
|
+
function(S, T)
|
|
187
|
+
return SemigroupIsomorphismByImages(S,
|
|
188
|
+
T,
|
|
189
|
+
GeneratorsOfSemigroup(S),
|
|
190
|
+
GeneratorsOfSemigroup(T));
|
|
191
|
+
end);
|
|
192
|
+
|
|
193
|
+
InstallMethod(SemigroupIsomorphismByImages, "for a semigroup and two lists",
|
|
194
|
+
[IsSemigroup, IsList, IsList],
|
|
195
|
+
{S, gens, imgs}
|
|
196
|
+
-> SemigroupIsomorphismByImages(S, Semigroup(imgs), gens, imgs));
|
|
197
|
+
|
|
198
|
+
InstallMethod(SemigroupHomomorphismByImages_NC,
|
|
199
|
+
"for two semigroups and two lists",
|
|
200
|
+
[IsSemigroup, IsSemigroup, IsList, IsList],
|
|
201
|
+
function(S, T, gens, imgs)
|
|
202
|
+
local hom;
|
|
203
|
+
|
|
204
|
+
hom := Objectify(NewType(GeneralMappingsFamily(ElementsFamily(FamilyObj(S)),
|
|
205
|
+
ElementsFamily(FamilyObj(T))),
|
|
206
|
+
IsSemigroupHomomorphismByImages), rec());
|
|
207
|
+
SetSource(hom, S);
|
|
208
|
+
SetRange(hom, T);
|
|
209
|
+
SetMappingGeneratorsImages(hom, [Immutable(gens), Immutable(imgs)]);
|
|
210
|
+
|
|
211
|
+
return hom;
|
|
212
|
+
end);
|
|
213
|
+
|
|
214
|
+
InstallMethod(SemigroupHomomorphismByFunctionNC,
|
|
215
|
+
"for semigroup, semigroup, and function",
|
|
216
|
+
[IsSemigroup, IsSemigroup, IsFunction],
|
|
217
|
+
function(S, T, f)
|
|
218
|
+
local hom;
|
|
219
|
+
hom := Objectify(NewType(GeneralMappingsFamily(ElementsFamily(FamilyObj(S)),
|
|
220
|
+
ElementsFamily(FamilyObj(T))),
|
|
221
|
+
IsSemigroupHomomorphismByFunction), rec(fun := f));
|
|
222
|
+
SetSource(hom, S);
|
|
223
|
+
SetRange(hom, T);
|
|
224
|
+
return hom;
|
|
225
|
+
end);
|
|
226
|
+
|
|
227
|
+
InstallMethod(SemigroupHomomorphismByFunction,
|
|
228
|
+
"for two semigroups and a function",
|
|
229
|
+
[IsSemigroup, IsSemigroup, IsFunction],
|
|
230
|
+
function(S, T, f)
|
|
231
|
+
local map;
|
|
232
|
+
map := MappingByFunction(S, T, f);
|
|
233
|
+
if not RespectsMultiplication(map) then
|
|
234
|
+
return fail;
|
|
235
|
+
fi;
|
|
236
|
+
SetFilterObj(map, IsSemigroupHomomorphismByFunction);
|
|
237
|
+
return map;
|
|
238
|
+
end);
|
|
239
|
+
|
|
240
|
+
InstallMethod(SemigroupIsomorphismByFunction,
|
|
241
|
+
"for two semigroups and two functions",
|
|
242
|
+
[IsSemigroup, IsSemigroup, IsFunction, IsFunction],
|
|
243
|
+
function(S, T, f, g)
|
|
244
|
+
local map, inv;
|
|
245
|
+
map := SemigroupHomomorphismByFunction(S, T, f);
|
|
246
|
+
if map = fail or not IsBijective(map) then
|
|
247
|
+
return fail;
|
|
248
|
+
fi;
|
|
249
|
+
inv := SemigroupHomomorphismByFunction(T, S, g);
|
|
250
|
+
if inv = fail or not IsBijective(inv) then
|
|
251
|
+
return fail;
|
|
252
|
+
elif CompositionMapping(map, inv)
|
|
253
|
+
<> SemigroupHomomorphismByFunctionNC(T, T, IdFunc) then
|
|
254
|
+
return fail;
|
|
255
|
+
fi;
|
|
256
|
+
|
|
257
|
+
return SemigroupIsomorphismByFunctionNC(S, T, f, g);
|
|
258
|
+
end);
|
|
259
|
+
|
|
260
|
+
InstallMethod(SemigroupIsomorphismByFunctionNC,
|
|
261
|
+
"for two semigroups and two functions",
|
|
262
|
+
[IsSemigroup, IsSemigroup, IsFunction, IsFunction],
|
|
263
|
+
function(S, T, f, g)
|
|
264
|
+
local iso;
|
|
265
|
+
iso := Objectify(NewType(GeneralMappingsFamily(ElementsFamily(FamilyObj(S)),
|
|
266
|
+
ElementsFamily(FamilyObj(T))),
|
|
267
|
+
IsSemigroupIsomorphismByFunction),
|
|
268
|
+
rec(fun := f,
|
|
269
|
+
invFun := g));
|
|
270
|
+
SetSource(iso, S);
|
|
271
|
+
SetRange(iso, T);
|
|
272
|
+
return iso;
|
|
273
|
+
end);
|
|
274
|
+
|
|
275
|
+
InstallMethod(InverseGeneralMapping,
|
|
276
|
+
"for a semigroup isomorphism by function",
|
|
277
|
+
[IsSemigroupIsomorphismByFunction],
|
|
278
|
+
function(map)
|
|
279
|
+
local inv;
|
|
280
|
+
inv := SemigroupIsomorphismByFunctionNC(Range(map),
|
|
281
|
+
Source(map),
|
|
282
|
+
map!.invFun,
|
|
283
|
+
map!.fun);
|
|
284
|
+
TransferMappingPropertiesToInverse(map, inv);
|
|
285
|
+
return inv;
|
|
286
|
+
end);
|
|
287
|
+
|
|
288
|
+
# The next method applies when we create a homomorphism using
|
|
289
|
+
# SemigroupHomomorphismByFunction and so invFun is not available.
|
|
290
|
+
|
|
291
|
+
InstallMethod(InverseGeneralMapping,
|
|
292
|
+
"for a bijective semigroup homomorphism by function",
|
|
293
|
+
[IsSemigroupHomomorphismByFunction and IsBijective],
|
|
294
|
+
function(map)
|
|
295
|
+
local inv;
|
|
296
|
+
inv := SemigroupIsomorphismByFunctionNC(Range(map),
|
|
297
|
+
Source(map),
|
|
298
|
+
x -> First(Source(map),
|
|
299
|
+
y -> y ^ map = x),
|
|
300
|
+
map!.fun);
|
|
301
|
+
TransferMappingPropertiesToInverse(map, inv);
|
|
302
|
+
return inv;
|
|
303
|
+
end);
|
|
304
|
+
|
|
305
|
+
# methods for converting between SHBI and SHBF
|
|
306
|
+
InstallMethod(AsSemigroupHomomorphismByImages,
|
|
307
|
+
"for a semigroup homomorphism by function",
|
|
308
|
+
[IsSemigroupHomomorphismByFunction],
|
|
309
|
+
function(hom)
|
|
310
|
+
local S, T, gens, imgs;
|
|
311
|
+
S := Source(hom);
|
|
312
|
+
T := Range(hom);
|
|
313
|
+
gens := GeneratorsOfSemigroup(S);
|
|
314
|
+
imgs := List(gens, x -> x ^ hom);
|
|
315
|
+
return SemigroupHomomorphismByImages(S, T, gens, imgs);
|
|
316
|
+
end);
|
|
317
|
+
|
|
318
|
+
InstallMethod(AsSemigroupHomomorphismByFunction,
|
|
319
|
+
"for a semigroup homomorphism by images",
|
|
320
|
+
[IsSemigroupHomomorphismByImages],
|
|
321
|
+
hom -> SemigroupHomomorphismByFunctionNC(Source(hom),
|
|
322
|
+
Range(hom),
|
|
323
|
+
x -> ImageElm(hom, x)));
|
|
324
|
+
|
|
325
|
+
InstallMethod(AsSemigroupIsomorphismByFunction,
|
|
326
|
+
"for a semigroup homomorphism by images",
|
|
327
|
+
[IsSemigroupHomomorphismByImages],
|
|
328
|
+
hom -> SemigroupIsomorphismByFunctionNC(Source(hom),
|
|
329
|
+
Range(hom),
|
|
330
|
+
x -> ImageElm(hom, x),
|
|
331
|
+
y -> PreImages(hom, y)));
|
|
332
|
+
|
|
333
|
+
# Methods for SHBI/SIBI/SHBF
|
|
334
|
+
InstallMethod(IsSurjective, "for a semigroup homomorphism",
|
|
335
|
+
[IsSemigroupHomomorphismByImagesOrFunction],
|
|
336
|
+
{hom} -> Size(ImagesSource(hom)) = Size(Range(hom)));
|
|
337
|
+
|
|
338
|
+
InstallMethod(IsInjective, "for a semigroup homomorphism",
|
|
339
|
+
[IsSemigroupHomomorphismByImagesOrFunction],
|
|
340
|
+
{hom} -> Size(Source(hom)) = Size(ImagesSource(hom)));
|
|
341
|
+
|
|
342
|
+
InstallMethod(ImagesSet, "for a semigroup homom. and list of elements",
|
|
343
|
+
[IsSemigroupHomomorphismByImagesOrFunction, IsList],
|
|
344
|
+
{hom, elms} -> List(elms, x -> ImageElm(hom, x)));
|
|
345
|
+
|
|
346
|
+
InstallMethod(ImageElm, "for a semigroup homom. by images and element",
|
|
347
|
+
[IsSemigroupHomomorphismByImages, IsMultiplicativeElement],
|
|
348
|
+
function(hom, x)
|
|
349
|
+
if not x in Source(hom) then
|
|
350
|
+
ErrorNoReturn("the 2nd argument (a mult. elt.) is not an element ",
|
|
351
|
+
"of the source of the 1st argument (semigroup homom. by ",
|
|
352
|
+
"images)");
|
|
353
|
+
fi;
|
|
354
|
+
# Use MinimalFactorization rather than Factorization because
|
|
355
|
+
# MinimalFactorization is guaranteed to return a list of positive integers,
|
|
356
|
+
# but Factorization is not (i.e. if S is an inverse acting semigroup.
|
|
357
|
+
# Also since we require an IsomorphismFpSemigroup, there's no additional
|
|
358
|
+
# cost to using MinimalFactorization instead of Factorization.
|
|
359
|
+
return EvaluateWord(MappingGeneratorsImages(hom)[2],
|
|
360
|
+
MinimalFactorization(Source(hom), x));
|
|
361
|
+
end);
|
|
362
|
+
|
|
363
|
+
InstallMethod(ImagesSource, "for SHBI",
|
|
364
|
+
[IsSemigroupHomomorphismByImages],
|
|
365
|
+
hom -> Semigroup(MappingGeneratorsImages(hom)[2]));
|
|
366
|
+
|
|
367
|
+
InstallMethod(PreImagesRepresentative,
|
|
368
|
+
"for a semigroup homom. by images and an element in the range",
|
|
369
|
+
[IsSemigroupHomomorphismByImages, IsMultiplicativeElement],
|
|
370
|
+
function(hom, x)
|
|
371
|
+
if not x in Range(hom) then
|
|
372
|
+
ErrorNoReturn("the 2nd argument is not an element of the range of the ",
|
|
373
|
+
"1st argument (semigroup homom. by images)");
|
|
374
|
+
elif not x in ImagesSource(hom) then
|
|
375
|
+
return fail;
|
|
376
|
+
fi;
|
|
377
|
+
# Use MinimalFactorization rather than Factorization because
|
|
378
|
+
# MinimalFactorization is guaranteed to return a list of positive integers,
|
|
379
|
+
# but Factorization is not (i.e. if S is an inverse acting semigroup.
|
|
380
|
+
# Also since we require an IsomorphismFpSemigroup, there's no additional
|
|
381
|
+
# cost to using MinimalFactorization instead of Factorization.
|
|
382
|
+
return EvaluateWord(MappingGeneratorsImages(hom)[1],
|
|
383
|
+
MinimalFactorization(ImagesSource(hom), x));
|
|
384
|
+
end);
|
|
385
|
+
|
|
386
|
+
InstallMethod(ImagesRepresentative,
|
|
387
|
+
"for a semigroup homom. by images and an element in the source",
|
|
388
|
+
[IsSemigroupHomomorphismByImages, IsMultiplicativeElement],
|
|
389
|
+
function(hom, x)
|
|
390
|
+
if not x in Source(hom) then
|
|
391
|
+
ErrorNoReturn("the 2nd argument is not an element of the source of the ",
|
|
392
|
+
"1st argument (semigroup homom. by images)");
|
|
393
|
+
fi;
|
|
394
|
+
# Use MinimalFactorization rather than Factorization because
|
|
395
|
+
# MinimalFactorization is guaranteed to return a list of positive integers,
|
|
396
|
+
# but Factorization is not (i.e. if S is an inverse acting semigroup.
|
|
397
|
+
# Also since we require an IsomorphismFpSemigroup, there's no additional
|
|
398
|
+
# cost to using MinimalFactorization instead of Factorization.
|
|
399
|
+
return EvaluateWord(MappingGeneratorsImages(hom)[2],
|
|
400
|
+
MinimalFactorization(Source(hom), x));
|
|
401
|
+
end);
|
|
402
|
+
|
|
403
|
+
InstallMethod(ImagesElm, "for a semigroup homom. by images and an element",
|
|
404
|
+
[IsSemigroupHomomorphismByImages, IsMultiplicativeElement],
|
|
405
|
+
{hom, x} -> [ImageElm(hom, x)]);
|
|
406
|
+
|
|
407
|
+
InstallMethod(PreImagesElm,
|
|
408
|
+
"for a semigroup homom. by images and an element in the range",
|
|
409
|
+
[IsSemigroupHomomorphismByImages, IsMultiplicativeElement],
|
|
410
|
+
function(hom, x)
|
|
411
|
+
local preim, y;
|
|
412
|
+
if not x in Range(hom) then
|
|
413
|
+
ErrorNoReturn("the 2nd argument is not an element of the range of the ",
|
|
414
|
+
"1st argument (semigroup homom. by images)");
|
|
415
|
+
elif not x in ImagesSource(hom) then
|
|
416
|
+
ErrorNoReturn("the 2nd argument is not mapped to by the 1st argument ",
|
|
417
|
+
"(semigroup homom. by images)");
|
|
418
|
+
fi;
|
|
419
|
+
preim := [];
|
|
420
|
+
for y in Source(hom) do
|
|
421
|
+
if ImageElm(hom, y) = x then
|
|
422
|
+
Add(preim, y);
|
|
423
|
+
fi;
|
|
424
|
+
od;
|
|
425
|
+
return preim;
|
|
426
|
+
end);
|
|
427
|
+
|
|
428
|
+
InstallMethod(KernelOfSemigroupHomomorphism, "for a semigroup homomorphism",
|
|
429
|
+
[IsSemigroupHomomorphismByImagesOrFunction],
|
|
430
|
+
function(hom)
|
|
431
|
+
local S, cong, enum, x, y, pairs, i, j;
|
|
432
|
+
|
|
433
|
+
if IsQuotientSemigroup(Range(hom)) then
|
|
434
|
+
return QuotientSemigroupCongruence(Range(hom));
|
|
435
|
+
fi;
|
|
436
|
+
|
|
437
|
+
S := Source(hom);
|
|
438
|
+
if IsBijective(hom) then
|
|
439
|
+
return SemigroupCongruence(S, []);
|
|
440
|
+
elif Size(ImagesSource(hom)) = 1 then
|
|
441
|
+
return UniversalSemigroupCongruence(S);
|
|
442
|
+
fi;
|
|
443
|
+
|
|
444
|
+
cong := SemigroupCongruence(S, []);
|
|
445
|
+
enum := EnumeratorCanonical(S);
|
|
446
|
+
for i in [1 .. Size(S) - 1] do
|
|
447
|
+
x := enum[i];
|
|
448
|
+
for j in [i + 1 .. Size(S)] do
|
|
449
|
+
y := enum[j];
|
|
450
|
+
if x ^ hom = y ^ hom then
|
|
451
|
+
if not [x, y] in cong then
|
|
452
|
+
pairs := ShallowCopy(GeneratingPairsOfSemigroupCongruence(cong));
|
|
453
|
+
Add(pairs, [x, y]);
|
|
454
|
+
cong := SemigroupCongruence(S, pairs);
|
|
455
|
+
if NrEquivalenceClasses(cong) = Size(ImagesSource(hom)) then
|
|
456
|
+
return cong;
|
|
457
|
+
fi;
|
|
458
|
+
fi;
|
|
459
|
+
fi;
|
|
460
|
+
od;
|
|
461
|
+
od;
|
|
462
|
+
return cong;
|
|
463
|
+
end);
|
|
464
|
+
|
|
465
|
+
InstallMethod(String, "for a semigroup homom. by images",
|
|
466
|
+
[IsSemigroupHomomorphismByImages],
|
|
467
|
+
function(hom)
|
|
468
|
+
local mapi;
|
|
469
|
+
if UserPreference("semigroups", "ViewObj") <> "semigroups-pkg" then
|
|
470
|
+
TryNextMethod();
|
|
471
|
+
fi;
|
|
472
|
+
mapi := MappingGeneratorsImages(hom);
|
|
473
|
+
return Concatenation("SemigroupHomomorphismByImages( ",
|
|
474
|
+
String(Source(hom)),
|
|
475
|
+
", ",
|
|
476
|
+
String(Range(hom)),
|
|
477
|
+
", ",
|
|
478
|
+
String(mapi[1]),
|
|
479
|
+
", ",
|
|
480
|
+
String(mapi[2]),
|
|
481
|
+
" )");
|
|
482
|
+
end);
|
|
483
|
+
|
|
484
|
+
InstallMethod(PrintObj, "for a semigroup homom. by images",
|
|
485
|
+
[IsSemigroupHomomorphismByImages],
|
|
486
|
+
function(hom)
|
|
487
|
+
Print(String(hom));
|
|
488
|
+
return;
|
|
489
|
+
end);
|
|
490
|
+
|
|
491
|
+
InstallMethod(String, "for a semigroup isom. by images",
|
|
492
|
+
[IsSemigroupHomomorphismByImages and IsBijective],
|
|
493
|
+
function(iso)
|
|
494
|
+
local mapi, str;
|
|
495
|
+
if UserPreference("semigroups", "ViewObj") <> "semigroups-pkg" then
|
|
496
|
+
TryNextMethod();
|
|
497
|
+
fi;
|
|
498
|
+
mapi := MappingGeneratorsImages(iso);
|
|
499
|
+
str := Concatenation("SemigroupIsomorphismByImages( ",
|
|
500
|
+
String(Source(iso)),
|
|
501
|
+
", ",
|
|
502
|
+
String(Range(iso)),
|
|
503
|
+
", ",
|
|
504
|
+
String(mapi[1]),
|
|
505
|
+
", ",
|
|
506
|
+
String(mapi[2]),
|
|
507
|
+
" )");
|
|
508
|
+
# print empty lists with two spaces for consistency
|
|
509
|
+
# see https://github.com/gap-system/gap/pull/5418
|
|
510
|
+
return ReplacedString(str, "[ ]", "[ ]");
|
|
511
|
+
end);
|
|
512
|
+
|
|
513
|
+
InstallMethod(\=, "compare homom. by images", IsIdenticalObj,
|
|
514
|
+
[IsSemigroupHomomorphismByImages, IsSemigroupHomomorphismByImages],
|
|
515
|
+
function(hom1, hom2)
|
|
516
|
+
local i;
|
|
517
|
+
if Source(hom1) <> Source(hom2)
|
|
518
|
+
or Range(hom1) <> Range(hom2)
|
|
519
|
+
or PreImagesRange(hom1) <> PreImagesRange(hom2)
|
|
520
|
+
or ImagesSource(hom1) <> ImagesSource(hom2) then
|
|
521
|
+
return false;
|
|
522
|
+
fi;
|
|
523
|
+
hom1 := MappingGeneratorsImages(hom1);
|
|
524
|
+
return hom1[2] = List(hom1[1], i -> ImageElm(hom2, i));
|
|
525
|
+
end);
|
|
526
|
+
|
|
527
|
+
InstallMethod(ViewObj, "for SHBI/SHBF",
|
|
528
|
+
[IsSemigroupHomomorphismByImagesOrFunction],
|
|
529
|
+
2, # to beat method for mapping by function with inverse
|
|
530
|
+
function(hom)
|
|
531
|
+
if UserPreference("semigroups", "ViewObj") <> "semigroups-pkg" then
|
|
532
|
+
TryNextMethod();
|
|
533
|
+
fi;
|
|
534
|
+
Print("\>");
|
|
535
|
+
ViewObj(Source(hom));
|
|
536
|
+
Print("\< \>->\< \>");
|
|
537
|
+
ViewObj(Range(hom));
|
|
538
|
+
Print("\<");
|
|
539
|
+
end);
|
|
540
|
+
|
|
541
|
+
InstallMethod(String, "for a semigroup homom. by function",
|
|
542
|
+
[IsSemigroupHomomorphismByFunction],
|
|
543
|
+
function(hom)
|
|
544
|
+
if UserPreference("semigroups", "ViewObj") <> "semigroups-pkg" then
|
|
545
|
+
TryNextMethod();
|
|
546
|
+
fi;
|
|
547
|
+
return Concatenation("SemigroupHomomorphismByFunction( ",
|
|
548
|
+
String(Source(hom)),
|
|
549
|
+
", ",
|
|
550
|
+
String(Range(hom)),
|
|
551
|
+
", ",
|
|
552
|
+
String(hom!.fun),
|
|
553
|
+
" )");
|
|
554
|
+
end);
|
|
555
|
+
|
|
556
|
+
InstallMethod(PrintObj, "for a semigroup homom. by function",
|
|
557
|
+
[IsSemigroupHomomorphismByFunction],
|
|
558
|
+
function(hom)
|
|
559
|
+
if UserPreference("semigroups", "ViewObj") <> "semigroups-pkg" then
|
|
560
|
+
TryNextMethod();
|
|
561
|
+
fi;
|
|
562
|
+
Print(String(hom));
|
|
563
|
+
return;
|
|
564
|
+
end);
|
|
565
|
+
|
|
566
|
+
InstallMethod(String, "for a semigroup isom. by function",
|
|
567
|
+
[IsSemigroupIsomorphismByFunction],
|
|
568
|
+
function(iso)
|
|
569
|
+
if UserPreference("semigroups", "ViewObj") <> "semigroups-pkg" then
|
|
570
|
+
TryNextMethod();
|
|
571
|
+
fi;
|
|
572
|
+
return Concatenation("SemigroupIsomorphismByFunction( ",
|
|
573
|
+
String(Source(iso)),
|
|
574
|
+
", ",
|
|
575
|
+
String(Range(iso)),
|
|
576
|
+
", ",
|
|
577
|
+
String(iso!.fun),
|
|
578
|
+
", ",
|
|
579
|
+
String(iso!.invFun),
|
|
580
|
+
" )");
|
|
581
|
+
end);
|
|
582
|
+
|
|
583
|
+
InstallMethod(PrintObj, "for a semigroup isom. by function",
|
|
584
|
+
[IsSemigroupIsomorphismByFunction],
|
|
585
|
+
function(iso)
|
|
586
|
+
if UserPreference("semigroups", "ViewObj") <> "semigroups-pkg" then
|
|
587
|
+
TryNextMethod();
|
|
588
|
+
fi;
|
|
589
|
+
Print(String(iso));
|
|
590
|
+
return;
|
|
591
|
+
end);
|