passagemath-gap-pkg-semigroups 10.6.30__cp311-cp311-macosx_13_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of passagemath-gap-pkg-semigroups might be problematic. Click here for more details.

Files changed (354) hide show
  1. gap/pkg/semigroups/CHANGELOG.md +1699 -0
  2. gap/pkg/semigroups/CONTRIBUTING.md +91 -0
  3. gap/pkg/semigroups/GNUmakefile +110 -0
  4. gap/pkg/semigroups/GNUmakefile.in +110 -0
  5. gap/pkg/semigroups/GPL +674 -0
  6. gap/pkg/semigroups/LICENSE +16 -0
  7. gap/pkg/semigroups/Makefile +26 -0
  8. gap/pkg/semigroups/Makefile.gappkg +225 -0
  9. gap/pkg/semigroups/PackageInfo.g +529 -0
  10. gap/pkg/semigroups/README.md +102 -0
  11. gap/pkg/semigroups/VERSIONS +112 -0
  12. gap/pkg/semigroups/aclocal.m4 +375 -0
  13. gap/pkg/semigroups/autogen.sh +25 -0
  14. gap/pkg/semigroups/bin/aarch64-apple-darwin23-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1158 -0
  17. gap/pkg/semigroups/config.status +1131 -0
  18. gap/pkg/semigroups/config.sub +1960 -0
  19. gap/pkg/semigroups/configure +9742 -0
  20. gap/pkg/semigroups/configure.ac +71 -0
  21. gap/pkg/semigroups/data/doc/greens.pickle +1 -0
  22. gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
  23. gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
  24. gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
  25. gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
  26. gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
  27. gap/pkg/semigroups/data/tst/bipart4 +10 -0
  28. gap/pkg/semigroups/data/tst/pperm10 +1 -0
  29. gap/pkg/semigroups/data/tst/tables.gz +0 -0
  30. gap/pkg/semigroups/data/tst/testdata +1 -0
  31. gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
  32. gap/pkg/semigroups/data/tst/trans3 +7 -0
  33. gap/pkg/semigroups/data/tst/trans3-old +7 -0
  34. gap/pkg/semigroups/environment.yml +7 -0
  35. gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
  36. gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
  37. gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
  38. gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
  39. gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
  40. gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
  41. gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
  42. gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
  43. gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
  44. gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
  45. gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
  46. gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
  47. gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
  48. gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
  49. gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
  50. gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
  51. gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
  52. gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
  53. gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
  54. gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
  55. gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
  56. gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
  57. gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
  58. gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
  59. gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
  60. gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
  61. gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
  62. gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
  63. gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
  64. gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
  65. gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
  66. gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
  67. gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
  68. gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
  69. gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
  70. gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
  71. gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
  72. gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
  73. gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
  74. gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
  75. gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
  76. gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
  77. gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
  78. gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
  79. gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
  80. gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
  81. gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
  82. gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
  83. gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
  84. gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
  85. gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
  86. gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
  87. gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
  88. gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
  89. gap/pkg/semigroups/gap/elements/elements.gd +11 -0
  90. gap/pkg/semigroups/gap/elements/elements.gi +121 -0
  91. gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
  92. gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
  93. gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
  94. gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
  95. gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
  96. gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
  97. gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
  98. gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
  99. gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
  100. gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
  101. gap/pkg/semigroups/gap/elements/star.gd +21 -0
  102. gap/pkg/semigroups/gap/elements/star.gi +21 -0
  103. gap/pkg/semigroups/gap/elements/trans.gd +13 -0
  104. gap/pkg/semigroups/gap/elements/trans.gi +50 -0
  105. gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
  106. gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
  107. gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
  108. gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
  109. gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
  110. gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
  111. gap/pkg/semigroups/gap/fp/word.gd +15 -0
  112. gap/pkg/semigroups/gap/fp/word.gi +67 -0
  113. gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
  114. gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
  115. gap/pkg/semigroups/gap/greens/acting.gd +81 -0
  116. gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
  117. gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
  118. gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
  119. gap/pkg/semigroups/gap/greens/generic.gd +117 -0
  120. gap/pkg/semigroups/gap/greens/generic.gi +630 -0
  121. gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
  122. gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
  123. gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
  124. gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
  125. gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
  126. gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
  127. gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
  128. gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
  129. gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
  130. gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
  131. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
  132. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
  133. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
  134. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
  135. gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
  136. gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
  137. gap/pkg/semigroups/gap/main/acting.gd +36 -0
  138. gap/pkg/semigroups/gap/main/acting.gi +779 -0
  139. gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
  140. gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
  141. gap/pkg/semigroups/gap/main/graded.gd +26 -0
  142. gap/pkg/semigroups/gap/main/graded.gi +355 -0
  143. gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
  144. gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
  145. gap/pkg/semigroups/gap/main/orbits.gd +24 -0
  146. gap/pkg/semigroups/gap/main/orbits.gi +512 -0
  147. gap/pkg/semigroups/gap/main/semiact.gd +20 -0
  148. gap/pkg/semigroups/gap/main/semiact.gi +821 -0
  149. gap/pkg/semigroups/gap/main/setup.gd +61 -0
  150. gap/pkg/semigroups/gap/main/setup.gi +1094 -0
  151. gap/pkg/semigroups/gap/obsolete.gd +9 -0
  152. gap/pkg/semigroups/gap/obsolete.gi +14 -0
  153. gap/pkg/semigroups/gap/options.g +55 -0
  154. gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
  155. gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
  156. gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
  157. gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
  158. gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
  159. gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
  160. gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
  161. gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
  162. gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
  163. gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
  164. gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
  165. gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
  166. gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
  167. gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
  168. gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
  169. gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
  170. gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
  171. gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
  172. gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
  173. gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
  174. gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
  175. gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
  176. gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
  177. gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
  178. gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
  179. gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
  180. gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
  181. gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
  182. gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
  183. gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
  184. gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
  185. gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
  186. gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
  187. gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
  188. gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
  189. gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
  190. gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
  191. gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
  192. gap/pkg/semigroups/gap/tools/display.gd +24 -0
  193. gap/pkg/semigroups/gap/tools/display.gi +749 -0
  194. gap/pkg/semigroups/gap/tools/io.gd +17 -0
  195. gap/pkg/semigroups/gap/tools/io.gi +543 -0
  196. gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
  197. gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
  198. gap/pkg/semigroups/gap/tools/utils.gd +19 -0
  199. gap/pkg/semigroups/gap/tools/utils.gi +756 -0
  200. gap/pkg/semigroups/gapbind14/.ccls +18 -0
  201. gap/pkg/semigroups/gapbind14/.clang-format +104 -0
  202. gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
  203. gap/pkg/semigroups/gapbind14/LICENSE +674 -0
  204. gap/pkg/semigroups/gapbind14/README.md +76 -0
  205. gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
  206. gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
  207. gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
  208. gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
  209. gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
  210. gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
  211. gap/pkg/semigroups/gapbind14/demo/configure +34 -0
  212. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
  213. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
  214. gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
  215. gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
  216. gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
  217. gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
  218. gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
  219. gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
  220. gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
  221. gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
  222. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
  223. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
  224. gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
  225. gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
  226. gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
  227. gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
  228. gap/pkg/semigroups/init.g +150 -0
  229. gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
  230. gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
  231. gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
  232. gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
  233. gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
  234. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
  235. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
  236. gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
  237. gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
  238. gap/pkg/semigroups/m4/find_gap.m4 +94 -0
  239. gap/pkg/semigroups/makedoc.g +153 -0
  240. gap/pkg/semigroups/prerequisites.sh +62 -0
  241. gap/pkg/semigroups/read.g +105 -0
  242. gap/pkg/semigroups/release.toml +6 -0
  243. gap/pkg/semigroups/tst/extreme/README +2 -0
  244. gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
  245. gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
  246. gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
  247. gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
  248. gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
  249. gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
  250. gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
  251. gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
  252. gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
  253. gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
  254. gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
  255. gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
  256. gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
  257. gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
  258. gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
  259. gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
  260. gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
  261. gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
  262. gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
  263. gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
  264. gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
  265. gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
  266. gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
  267. gap/pkg/semigroups/tst/standard/README +2 -0
  268. gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
  269. gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
  270. gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
  271. gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
  272. gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
  273. gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
  274. gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
  275. gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
  276. gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
  277. gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
  278. gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
  279. gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
  280. gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
  281. gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
  282. gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
  283. gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
  284. gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
  285. gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
  286. gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
  287. gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
  288. gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
  289. gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
  290. gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
  291. gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
  292. gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
  293. gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
  294. gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
  295. gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
  296. gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
  297. gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
  298. gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
  299. gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
  300. gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
  301. gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
  302. gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
  303. gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
  304. gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
  305. gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
  306. gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
  307. gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
  308. gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
  309. gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
  310. gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
  311. gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
  312. gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
  313. gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
  314. gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
  315. gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
  316. gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
  317. gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
  318. gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
  319. gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
  320. gap/pkg/semigroups/tst/standard/options.tst +54 -0
  321. gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
  322. gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
  323. gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
  324. gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
  325. gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
  326. gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
  327. gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
  328. gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
  329. gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
  330. gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
  331. gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
  332. gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
  333. gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
  334. gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
  335. gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
  336. gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
  337. gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
  338. gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
  339. gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
  340. gap/pkg/semigroups/tst/testinstall.tst +1815 -0
  341. gap/pkg/semigroups/tst/teststandard.g +22 -0
  342. gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
  343. gap/pkg/semigroups/tst/workspaces/load.g +11 -0
  344. gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
  345. gap/pkg/semigroups/tst/workspaces/save.g +14 -0
  346. passagemath_gap_pkg_semigroups-10.6.30.dist-info/METADATA +93 -0
  347. passagemath_gap_pkg_semigroups-10.6.30.dist-info/METADATA.bak +94 -0
  348. passagemath_gap_pkg_semigroups-10.6.30.dist-info/RECORD +354 -0
  349. passagemath_gap_pkg_semigroups-10.6.30.dist-info/WHEEL +6 -0
  350. passagemath_gap_pkg_semigroups-10.6.30.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.dylibs/libsemigroups.2.dylib +0 -0
  352. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  353. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  354. sage/libs/gap_pkg_semigroups.cpython-311-darwin.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");