passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-musllinux_1_2_x86_64.whl

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

Potentially problematic release.


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

Files changed (356) 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/x86_64-pc-linux-musl-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1068 -0
  17. gap/pkg/semigroups/config.status +1133 -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.29.dist-info/METADATA +93 -0
  347. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
  348. passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +356 -0
  349. passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +5 -0
  350. passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.libs/libgcc_s-0cd532bd.so.1 +0 -0
  352. passagemath_gap_pkg_semigroups.libs/libsemigroups-f0b7066b.so.2.0.0 +0 -0
  353. passagemath_gap_pkg_semigroups.libs/libstdc++-5d72f927.so.6.0.33 +0 -0
  354. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  355. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  356. 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);