passagemath-gap-pkg-semigroups 10.6.30__cp310-cp310-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-310-darwin.so +0 -0
@@ -0,0 +1,2702 @@
1
+ #############################################################################
2
+ ##
3
+ ## standard/semigroups/semifp.tst
4
+ #Y Copyright (C) 2015-2022 Wilf A. Wilson
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ ## We don't use local variables in this test file because it doesn't play nice
12
+ ## with AssignGeneratorVariables, which is used repeatedly here.
13
+
14
+ gap> START_TEST("Semigroups package: standard/semigroups/semifp.tst");
15
+ gap> LoadPackage("semigroups", false);;
16
+
17
+ #
18
+ gap> SEMIGROUPS.StartTest();
19
+
20
+ #
21
+ gap> Noop := 0;;
22
+ gap> TestEnumerator := function(en)
23
+ > return ForAll(en, x -> en[Position(en, x)] = x)
24
+ > and ForAll([1 .. Length(en)], i -> Position(en, en[i]) = i)
25
+ > and ForAll(en, x -> x in en)
26
+ > and ForAll([1 .. Length(en)], i -> IsBound(en[i]))
27
+ > and ForAll([Length(en) + 1 .. Length(en) + 10], i -> not IsBound(en[i]));
28
+ > end;;
29
+ gap> TestIterator := function(S, it)
30
+ > local LoopIterator;
31
+ > LoopIterator := function(it)
32
+ > local valid, len, x;
33
+ > valid := true;;
34
+ > len := 0;
35
+ > for x in it do
36
+ > len := len + 1;
37
+ > if not x in S then
38
+ > valid := false;
39
+ > break;
40
+ > fi;
41
+ > od;
42
+ > return valid and IsDoneIterator(it) and len = Size(S);
43
+ > end;
44
+ > return LoopIterator(it) and LoopIterator(ShallowCopy(it));
45
+ > end;;
46
+
47
+ # Test IsomorphismFpMonoid,
48
+ gap> S := Monoid(Transformation([1, 3, 4, 1, 3]),
49
+ > Transformation([2, 4, 1, 5, 5]),
50
+ > Transformation([2, 5, 3, 5, 3]),
51
+ > Transformation([4, 1, 2, 2, 1]),
52
+ > Transformation([5, 5, 1, 1, 3]));;
53
+ gap> map := IsomorphismFpMonoid(S);
54
+ <transformation monoid of degree 5 with 5 generators> ->
55
+ <fp monoid with 5 generators and 608 relations of length 4953>
56
+ gap> inv := InverseGeneralMapping(map);
57
+ <fp monoid with 5 generators and 608 relations of length 4953> ->
58
+ <transformation monoid of degree 5 with 5 generators>
59
+ gap> ForAll(S, x -> (x ^ map) ^ inv = x);
60
+ true
61
+ gap> map := IsomorphismFpSemigroup(S);;
62
+ gap> inv := InverseGeneralMapping(map);;
63
+ gap> ForAll(S, x -> (x ^ map) ^ inv = x);
64
+ true
65
+
66
+ # Test IsomorphismFpMonoid, infinite
67
+ gap> IsomorphismFpMonoid(FreeMonoid(2));
68
+ <free monoid on the generators [ m1, m2 ]> ->
69
+ <fp monoid with 2 generators and 0 relations of length 2>
70
+
71
+ # Test IsomorphismFpSemigroup, infinite
72
+ gap> IsomorphismFpSemigroup(FreeInverseSemigroup(2));
73
+ Error, no method found! For debugging hints type ?Recovery from NoMethodFound
74
+ Error, no 3rd choice method found for `IsomorphismFpSemigroup' on 1 arguments
75
+
76
+ # BruteForceIsoCheck helper functions
77
+ gap> BruteForceIsoCheck := function(iso)
78
+ > local x, y;
79
+ > if not IsInjective(iso) or not IsSurjective(iso) then
80
+ > return false;
81
+ > fi;
82
+ > for x in Generators(Source(iso)) do
83
+ > for y in Generators(Source(iso)) do
84
+ > if x ^ iso * y ^ iso <> (x * y) ^ iso then
85
+ > return false;
86
+ > fi;
87
+ > od;
88
+ > od;
89
+ > return true;
90
+ > end;;
91
+ gap> BruteForceInverseCheck := function(map)
92
+ > local inv;
93
+ > inv := InverseGeneralMapping(map);
94
+ > return ForAll(Source(map), x -> x = (x ^ map) ^ inv)
95
+ > and ForAll(Range(map), x -> x = (x ^ inv) ^ map);
96
+ > end;;
97
+
98
+ # AsFpSemigroup 1: trivial semigroup
99
+ gap> S := TrivialSemigroup();
100
+ <trivial transformation group of degree 0 with 1 generator>
101
+ gap> S := AsSemigroup(IsFpSemigroup, S);
102
+ <fp semigroup with 1 generator and 1 relation of length 4>
103
+ gap> RelationsOfFpSemigroup(S);
104
+ [ [ s1^2, s1 ] ]
105
+
106
+ # AsFpSemigroup 2: 2 element semilattice
107
+ gap> S := Semigroup(PartialPerm([1]), PartialPerm([], []));
108
+ <partial perm monoid of rank 1 with 2 generators>
109
+ gap> S := AsSemigroup(IsFpSemigroup, S);
110
+ <fp semigroup with 2 generators and 4 relations of length 14>
111
+ gap> RelationsOfFpSemigroup(S);
112
+ [ [ s1^2, s1 ], [ s1*s2, s2 ], [ s2*s1, s2 ], [ s2^2, s2 ] ]
113
+
114
+ # AsFpMonoid 1: trivial semigroup
115
+ gap> S := TrivialSemigroup();
116
+ <trivial transformation group of degree 0 with 1 generator>
117
+ gap> S := AsMonoid(IsFpMonoid, S);;
118
+
119
+ # AsFpMonoid 2: 2 element semilattice
120
+ gap> S := Semigroup(PartialPerm([1]), PartialPerm([], []));
121
+ <partial perm monoid of rank 1 with 2 generators>
122
+ gap> S := AsMonoid(IsFpMonoid, S);
123
+ <fp monoid with 1 generator and 1 relation of length 4>
124
+ gap> RelationsOfFpMonoid(S);
125
+ [ [ m1^2, m1 ] ]
126
+
127
+ # AsSemigroup:
128
+ # convert from IsPBRSemigroup to IsFpSemigroup
129
+ gap> S := Semigroup([
130
+ > PBR([[-1], [-3], [-3]], [[1], [], [2, 3]]),
131
+ > PBR([[-2], [-3], [-3]], [[], [1], [2, 3]])]);
132
+ <pbr semigroup of degree 3 with 2 generators>
133
+ gap> T := AsSemigroup(IsFpSemigroup, S);
134
+ <fp semigroup with 2 generators and 3 relations of length 12>
135
+ gap> Size(S) = Size(T);
136
+ true
137
+ gap> NrDClasses(S) = NrDClasses(T);
138
+ true
139
+ gap> NrRClasses(S) = NrRClasses(T);
140
+ true
141
+ gap> NrLClasses(S) = NrLClasses(T);
142
+ true
143
+ gap> NrIdempotents(S) = NrIdempotents(T);
144
+ true
145
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
146
+ gap> BruteForceIsoCheck(map);
147
+ true
148
+ gap> BruteForceInverseCheck(map);
149
+ true
150
+
151
+ # AsSemigroup:
152
+ # convert from IsFpSemigroup to IsFpSemigroup
153
+ gap> F := FreeSemigroup(2);; AssignGeneratorVariables(F);;
154
+ gap> rels := [[s1 ^ 2, s1], [s1 * s2, s2], [s2 ^ 2, s2 * s1]];;
155
+ gap> S := F / rels;
156
+ <fp semigroup with 2 generators and 3 relations of length 12>
157
+ gap> T := AsSemigroup(IsFpSemigroup, S);
158
+ <fp semigroup with 2 generators and 3 relations of length 12>
159
+ gap> Size(S) = Size(T);
160
+ true
161
+ gap> NrDClasses(S) = NrDClasses(T);
162
+ true
163
+ gap> NrRClasses(S) = NrRClasses(T);
164
+ true
165
+ gap> NrLClasses(S) = NrLClasses(T);
166
+ true
167
+ gap> NrIdempotents(S) = NrIdempotents(T);
168
+ true
169
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
170
+ gap> BruteForceIsoCheck(map);
171
+ true
172
+ gap> BruteForceInverseCheck(map);
173
+ true
174
+
175
+ # AsSemigroup:
176
+ # convert from IsBipartitionSemigroup to IsFpSemigroup
177
+ gap> S := Semigroup([
178
+ > Bipartition([[1, -1], [2], [-2]]),
179
+ > Bipartition([[1, -2], [2], [-1]])]);
180
+ <bipartition semigroup of degree 2 with 2 generators>
181
+ gap> T := AsSemigroup(IsFpSemigroup, S);
182
+ <fp semigroup with 2 generators and 3 relations of length 12>
183
+ gap> Size(S) = Size(T);
184
+ true
185
+ gap> NrDClasses(S) = NrDClasses(T);
186
+ true
187
+ gap> NrRClasses(S) = NrRClasses(T);
188
+ true
189
+ gap> NrLClasses(S) = NrLClasses(T);
190
+ true
191
+ gap> NrIdempotents(S) = NrIdempotents(T);
192
+ true
193
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
194
+ gap> BruteForceIsoCheck(map);
195
+ true
196
+ gap> BruteForceInverseCheck(map);
197
+ true
198
+
199
+ # AsSemigroup:
200
+ # convert from IsTransformationSemigroup to IsFpSemigroup
201
+ gap> S := Semigroup([
202
+ > Transformation([1, 3, 3]), Transformation([2, 3, 3])]);
203
+ <transformation semigroup of degree 3 with 2 generators>
204
+ gap> T := AsSemigroup(IsFpSemigroup, S);
205
+ <fp semigroup with 2 generators and 3 relations of length 12>
206
+ gap> Size(S) = Size(T);
207
+ true
208
+ gap> NrDClasses(S) = NrDClasses(T);
209
+ true
210
+ gap> NrRClasses(S) = NrRClasses(T);
211
+ true
212
+ gap> NrLClasses(S) = NrLClasses(T);
213
+ true
214
+ gap> NrIdempotents(S) = NrIdempotents(T);
215
+ true
216
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
217
+ gap> BruteForceIsoCheck(map);
218
+ true
219
+ gap> BruteForceInverseCheck(map);
220
+ true
221
+
222
+ # AsSemigroup:
223
+ # convert from IsBooleanMatSemigroup to IsFpSemigroup
224
+ gap> S := Semigroup([
225
+ > Matrix(IsBooleanMat,
226
+ > [[true, false, false],
227
+ > [false, false, true],
228
+ > [false, false, true]]),
229
+ > Matrix(IsBooleanMat,
230
+ > [[false, true, false],
231
+ > [false, false, true],
232
+ > [false, false, true]])]);
233
+ <semigroup of 3x3 boolean matrices with 2 generators>
234
+ gap> T := AsSemigroup(IsFpSemigroup, S);
235
+ <fp semigroup with 2 generators and 3 relations of length 12>
236
+ gap> Size(S) = Size(T);
237
+ true
238
+ gap> NrDClasses(S) = NrDClasses(T);
239
+ true
240
+ gap> NrRClasses(S) = NrRClasses(T);
241
+ true
242
+ gap> NrLClasses(S) = NrLClasses(T);
243
+ true
244
+ gap> NrIdempotents(S) = NrIdempotents(T);
245
+ true
246
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
247
+ gap> BruteForceIsoCheck(map);
248
+ true
249
+ gap> BruteForceInverseCheck(map);
250
+ true
251
+
252
+ # AsSemigroup:
253
+ # convert from IsMaxPlusMatrixSemigroup to IsFpSemigroup
254
+ gap> S := Semigroup([
255
+ > Matrix(IsMaxPlusMatrix,
256
+ > [[0, -infinity, -infinity],
257
+ > [-infinity, -infinity, 0],
258
+ > [-infinity, -infinity, 0]]),
259
+ > Matrix(IsMaxPlusMatrix,
260
+ > [[-infinity, 0, -infinity],
261
+ > [-infinity, -infinity, 0],
262
+ > [-infinity, -infinity, 0]])]);
263
+ <semigroup of 3x3 max-plus matrices with 2 generators>
264
+ gap> T := AsSemigroup(IsFpSemigroup, S);
265
+ <fp semigroup with 2 generators and 3 relations of length 12>
266
+ gap> Size(S) = Size(T);
267
+ true
268
+ gap> NrDClasses(S) = NrDClasses(T);
269
+ true
270
+ gap> NrRClasses(S) = NrRClasses(T);
271
+ true
272
+ gap> NrLClasses(S) = NrLClasses(T);
273
+ true
274
+ gap> NrIdempotents(S) = NrIdempotents(T);
275
+ true
276
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
277
+ gap> BruteForceIsoCheck(map);
278
+ true
279
+ gap> BruteForceInverseCheck(map);
280
+ true
281
+
282
+ # AsSemigroup:
283
+ # convert from IsMinPlusMatrixSemigroup to IsFpSemigroup
284
+ gap> S := Semigroup([
285
+ > Matrix(IsMinPlusMatrix,
286
+ > [[0, infinity, infinity],
287
+ > [infinity, infinity, 0],
288
+ > [infinity, infinity, 0]]),
289
+ > Matrix(IsMinPlusMatrix,
290
+ > [[infinity, 0, infinity],
291
+ > [infinity, infinity, 0],
292
+ > [infinity, infinity, 0]])]);
293
+ <semigroup of 3x3 min-plus matrices with 2 generators>
294
+ gap> T := AsSemigroup(IsFpSemigroup, S);
295
+ <fp semigroup with 2 generators and 3 relations of length 12>
296
+ gap> Size(S) = Size(T);
297
+ true
298
+ gap> NrDClasses(S) = NrDClasses(T);
299
+ true
300
+ gap> NrRClasses(S) = NrRClasses(T);
301
+ true
302
+ gap> NrLClasses(S) = NrLClasses(T);
303
+ true
304
+ gap> NrIdempotents(S) = NrIdempotents(T);
305
+ true
306
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
307
+ gap> BruteForceIsoCheck(map);
308
+ true
309
+ gap> BruteForceInverseCheck(map);
310
+ true
311
+
312
+ # AsSemigroup:
313
+ # convert from IsProjectiveMaxPlusMatrixSemigroup to IsFpSemigroup
314
+ gap> S := Semigroup([
315
+ > Matrix(IsProjectiveMaxPlusMatrix,
316
+ > [[0, -infinity, -infinity],
317
+ > [-infinity, -infinity, 0],
318
+ > [-infinity, -infinity, 0]]),
319
+ > Matrix(IsProjectiveMaxPlusMatrix,
320
+ > [[-infinity, 0, -infinity],
321
+ > [-infinity, -infinity, 0],
322
+ > [-infinity, -infinity, 0]])]);
323
+ <semigroup of 3x3 projective max-plus matrices with 2 generators>
324
+ gap> T := AsSemigroup(IsFpSemigroup, S);
325
+ <fp semigroup with 2 generators and 3 relations of length 12>
326
+ gap> Size(S) = Size(T);
327
+ true
328
+ gap> NrDClasses(S) = NrDClasses(T);
329
+ true
330
+ gap> NrRClasses(S) = NrRClasses(T);
331
+ true
332
+ gap> NrLClasses(S) = NrLClasses(T);
333
+ true
334
+ gap> NrIdempotents(S) = NrIdempotents(T);
335
+ true
336
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
337
+ gap> BruteForceIsoCheck(map);
338
+ true
339
+ gap> BruteForceInverseCheck(map);
340
+ true
341
+
342
+ # AsSemigroup:
343
+ # convert from IsIntegerMatrixSemigroup to IsFpSemigroup
344
+ gap> S := Semigroup([
345
+ > Matrix(Integers,
346
+ > [[1, 0, 0],
347
+ > [0, 0, 1],
348
+ > [0, 0, 1]]),
349
+ > Matrix(Integers,
350
+ > [[0, 1, 0],
351
+ > [0, 0, 1],
352
+ > [0, 0, 1]])]);
353
+ <semigroup of 3x3 integer matrices with 2 generators>
354
+ gap> T := AsSemigroup(IsFpSemigroup, S);
355
+ <fp semigroup with 2 generators and 3 relations of length 12>
356
+ gap> Size(S) = Size(T);
357
+ true
358
+ gap> NrDClasses(S) = NrDClasses(T);
359
+ true
360
+ gap> NrRClasses(S) = NrRClasses(T);
361
+ true
362
+ gap> NrLClasses(S) = NrLClasses(T);
363
+ true
364
+ gap> NrIdempotents(S) = NrIdempotents(T);
365
+ true
366
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
367
+ gap> BruteForceIsoCheck(map);
368
+ true
369
+ gap> BruteForceInverseCheck(map);
370
+ true
371
+
372
+ # AsSemigroup:
373
+ # convert from IsTropicalMaxPlusMatrixSemigroup to IsFpSemigroup
374
+ gap> S := Semigroup([
375
+ > Matrix(IsTropicalMaxPlusMatrix,
376
+ > [[0, -infinity, -infinity],
377
+ > [-infinity, -infinity, 0],
378
+ > [-infinity, -infinity, 0]], 3),
379
+ > Matrix(IsTropicalMaxPlusMatrix,
380
+ > [[-infinity, 0, -infinity],
381
+ > [-infinity, -infinity, 0],
382
+ > [-infinity, -infinity, 0]], 3)]);
383
+ <semigroup of 3x3 tropical max-plus matrices with 2 generators>
384
+ gap> T := AsSemigroup(IsFpSemigroup, S);
385
+ <fp semigroup with 2 generators and 3 relations of length 12>
386
+ gap> Size(S) = Size(T);
387
+ true
388
+ gap> NrDClasses(S) = NrDClasses(T);
389
+ true
390
+ gap> NrRClasses(S) = NrRClasses(T);
391
+ true
392
+ gap> NrLClasses(S) = NrLClasses(T);
393
+ true
394
+ gap> NrIdempotents(S) = NrIdempotents(T);
395
+ true
396
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
397
+ gap> BruteForceIsoCheck(map);
398
+ true
399
+ gap> BruteForceInverseCheck(map);
400
+ true
401
+
402
+ # AsSemigroup:
403
+ # convert from IsTropicalMinPlusMatrixSemigroup to IsFpSemigroup
404
+ gap> S := Semigroup([
405
+ > Matrix(IsTropicalMinPlusMatrix,
406
+ > [[0, infinity, infinity],
407
+ > [infinity, infinity, 0],
408
+ > [infinity, infinity, 0]], 3),
409
+ > Matrix(IsTropicalMinPlusMatrix,
410
+ > [[infinity, 0, infinity],
411
+ > [infinity, infinity, 0],
412
+ > [infinity, infinity, 0]], 3)]);
413
+ <semigroup of 3x3 tropical min-plus matrices with 2 generators>
414
+ gap> T := AsSemigroup(IsFpSemigroup, S);
415
+ <fp semigroup with 2 generators and 3 relations of length 12>
416
+ gap> Size(S) = Size(T);
417
+ true
418
+ gap> NrDClasses(S) = NrDClasses(T);
419
+ true
420
+ gap> NrRClasses(S) = NrRClasses(T);
421
+ true
422
+ gap> NrLClasses(S) = NrLClasses(T);
423
+ true
424
+ gap> NrIdempotents(S) = NrIdempotents(T);
425
+ true
426
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
427
+ gap> BruteForceIsoCheck(map);
428
+ true
429
+ gap> BruteForceInverseCheck(map);
430
+ true
431
+
432
+ # AsSemigroup:
433
+ # convert from IsNTPMatrixSemigroup to IsFpSemigroup
434
+ gap> S := Semigroup([
435
+ > Matrix(IsNTPMatrix,
436
+ > [[1, 0, 0],
437
+ > [0, 0, 1],
438
+ > [0, 0, 1]], 3, 4),
439
+ > Matrix(IsNTPMatrix,
440
+ > [[0, 1, 0],
441
+ > [0, 0, 1],
442
+ > [0, 0, 1]], 3, 4)]);
443
+ <semigroup of 3x3 ntp matrices with 2 generators>
444
+ gap> T := AsSemigroup(IsFpSemigroup, S);
445
+ <fp semigroup with 2 generators and 3 relations of length 12>
446
+ gap> Size(S) = Size(T);
447
+ true
448
+ gap> NrDClasses(S) = NrDClasses(T);
449
+ true
450
+ gap> NrRClasses(S) = NrRClasses(T);
451
+ true
452
+ gap> NrLClasses(S) = NrLClasses(T);
453
+ true
454
+ gap> NrIdempotents(S) = NrIdempotents(T);
455
+ true
456
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
457
+ gap> BruteForceIsoCheck(map);
458
+ true
459
+ gap> BruteForceInverseCheck(map);
460
+ true
461
+
462
+ # AsSemigroup:
463
+ # convert from IsPBRMonoid to IsFpSemigroup
464
+ gap> S := Monoid([
465
+ > PBR([[-2], [-2], [-3]], [[], [1, 2], [3]]),
466
+ > PBR([[-1], [-3], [-3]], [[1], [], [2, 3]])]);
467
+ <pbr monoid of degree 3 with 2 generators>
468
+ gap> T := AsSemigroup(IsFpSemigroup, S);
469
+ <fp semigroup with 3 generators and 9 relations of length 34>
470
+ gap> Size(S) = Size(T);
471
+ true
472
+ gap> NrDClasses(S) = NrDClasses(T);
473
+ true
474
+ gap> NrRClasses(S) = NrRClasses(T);
475
+ true
476
+ gap> NrLClasses(S) = NrLClasses(T);
477
+ true
478
+ gap> NrIdempotents(S) = NrIdempotents(T);
479
+ true
480
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
481
+ gap> BruteForceIsoCheck(map);
482
+ true
483
+ gap> BruteForceInverseCheck(map);
484
+ true
485
+
486
+ # AsSemigroup:
487
+ # convert from IsFpMonoid to IsFpSemigroup
488
+ gap> F := FreeMonoid(2);; AssignGeneratorVariables(F);;
489
+ gap> rels := [[m1 ^ 2, m1], [m2 ^ 2, m2], [m1 * m2 * m1, m1 * m2],
490
+ > [m2 * m1 * m2, m1 * m2]];;
491
+ gap> S := F / rels;
492
+ <fp monoid with 2 generators and 4 relations of length 18>
493
+ gap> T := AsSemigroup(IsFpSemigroup, S);
494
+ <fp semigroup with 3 generators and 9 relations of length 34>
495
+ gap> Size(S) = Size(T);
496
+ true
497
+ gap> NrDClasses(S) = NrDClasses(T);
498
+ true
499
+ gap> NrRClasses(S) = NrRClasses(T);
500
+ true
501
+ gap> NrLClasses(S) = NrLClasses(T);
502
+ true
503
+ gap> NrIdempotents(S) = NrIdempotents(T);
504
+ true
505
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
506
+ gap> BruteForceIsoCheck(map);
507
+ true
508
+ gap> BruteForceInverseCheck(map);
509
+ true
510
+
511
+ # AsSemigroup:
512
+ # convert from IsBipartitionMonoid to IsFpSemigroup
513
+ gap> S := Monoid([
514
+ > Bipartition([[1, 2, -2], [3, -3], [-1]]),
515
+ > Bipartition([[1, -1], [2, 3, -3], [-2]])]);
516
+ <bipartition monoid of degree 3 with 2 generators>
517
+ gap> T := AsSemigroup(IsFpSemigroup, S);
518
+ <fp semigroup with 3 generators and 9 relations of length 34>
519
+ gap> Size(S) = Size(T);
520
+ true
521
+ gap> NrDClasses(S) = NrDClasses(T);
522
+ true
523
+ gap> NrRClasses(S) = NrRClasses(T);
524
+ true
525
+ gap> NrLClasses(S) = NrLClasses(T);
526
+ true
527
+ gap> NrIdempotents(S) = NrIdempotents(T);
528
+ true
529
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
530
+ gap> BruteForceIsoCheck(map);
531
+ true
532
+ gap> BruteForceInverseCheck(map);
533
+ true
534
+
535
+ # AsSemigroup:
536
+ # convert from IsTransformationMonoid to IsFpSemigroup
537
+ gap> S := Monoid([
538
+ > Transformation([2, 2]), Transformation([1, 3, 3])]);
539
+ <transformation monoid of degree 3 with 2 generators>
540
+ gap> T := AsSemigroup(IsFpSemigroup, S);
541
+ <fp semigroup with 3 generators and 9 relations of length 34>
542
+ gap> Size(S) = Size(T);
543
+ true
544
+ gap> NrDClasses(S) = NrDClasses(T);
545
+ true
546
+ gap> NrRClasses(S) = NrRClasses(T);
547
+ true
548
+ gap> NrLClasses(S) = NrLClasses(T);
549
+ true
550
+ gap> NrIdempotents(S) = NrIdempotents(T);
551
+ true
552
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
553
+ gap> BruteForceIsoCheck(map);
554
+ true
555
+ gap> BruteForceInverseCheck(map);
556
+ true
557
+
558
+ # AsSemigroup:
559
+ # convert from IsBooleanMatMonoid to IsFpSemigroup
560
+ gap> S := Monoid([
561
+ > Matrix(IsBooleanMat,
562
+ > [[false, true, false],
563
+ > [false, true, false],
564
+ > [false, false, true]]),
565
+ > Matrix(IsBooleanMat,
566
+ > [[true, false, false],
567
+ > [false, false, true],
568
+ > [false, false, true]])]);
569
+ <monoid of 3x3 boolean matrices with 2 generators>
570
+ gap> T := AsSemigroup(IsFpSemigroup, S);
571
+ <fp semigroup with 3 generators and 9 relations of length 34>
572
+ gap> Size(S) = Size(T);
573
+ true
574
+ gap> NrDClasses(S) = NrDClasses(T);
575
+ true
576
+ gap> NrRClasses(S) = NrRClasses(T);
577
+ true
578
+ gap> NrLClasses(S) = NrLClasses(T);
579
+ true
580
+ gap> NrIdempotents(S) = NrIdempotents(T);
581
+ true
582
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
583
+ gap> BruteForceIsoCheck(map);
584
+ true
585
+ gap> BruteForceInverseCheck(map);
586
+ true
587
+
588
+ # AsSemigroup:
589
+ # convert from IsMaxPlusMatrixMonoid to IsFpSemigroup
590
+ gap> S := Monoid([
591
+ > Matrix(IsMaxPlusMatrix,
592
+ > [[-infinity, 0, -infinity],
593
+ > [-infinity, 0, -infinity],
594
+ > [-infinity, -infinity, 0]]),
595
+ > Matrix(IsMaxPlusMatrix,
596
+ > [[0, -infinity, -infinity],
597
+ > [-infinity, -infinity, 0],
598
+ > [-infinity, -infinity, 0]])]);
599
+ <monoid of 3x3 max-plus matrices with 2 generators>
600
+ gap> T := AsSemigroup(IsFpSemigroup, S);
601
+ <fp semigroup with 3 generators and 9 relations of length 34>
602
+ gap> Size(S) = Size(T);
603
+ true
604
+ gap> NrDClasses(S) = NrDClasses(T);
605
+ true
606
+ gap> NrRClasses(S) = NrRClasses(T);
607
+ true
608
+ gap> NrLClasses(S) = NrLClasses(T);
609
+ true
610
+ gap> NrIdempotents(S) = NrIdempotents(T);
611
+ true
612
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
613
+ gap> BruteForceIsoCheck(map);
614
+ true
615
+ gap> BruteForceInverseCheck(map);
616
+ true
617
+
618
+ # AsSemigroup:
619
+ # convert from IsMinPlusMatrixMonoid to IsFpSemigroup
620
+ gap> S := Monoid([
621
+ > Matrix(IsMinPlusMatrix,
622
+ > [[infinity, 0, infinity],
623
+ > [infinity, 0, infinity],
624
+ > [infinity, infinity, 0]]),
625
+ > Matrix(IsMinPlusMatrix,
626
+ > [[0, infinity, infinity],
627
+ > [infinity, infinity, 0],
628
+ > [infinity, infinity, 0]])]);
629
+ <monoid of 3x3 min-plus matrices with 2 generators>
630
+ gap> T := AsSemigroup(IsFpSemigroup, S);
631
+ <fp semigroup with 3 generators and 9 relations of length 34>
632
+ gap> Size(S) = Size(T);
633
+ true
634
+ gap> NrDClasses(S) = NrDClasses(T);
635
+ true
636
+ gap> NrRClasses(S) = NrRClasses(T);
637
+ true
638
+ gap> NrLClasses(S) = NrLClasses(T);
639
+ true
640
+ gap> NrIdempotents(S) = NrIdempotents(T);
641
+ true
642
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
643
+ gap> BruteForceIsoCheck(map);
644
+ true
645
+ gap> BruteForceInverseCheck(map);
646
+ true
647
+
648
+ # AsSemigroup:
649
+ # convert from IsProjectiveMaxPlusMatrixMonoid to IsFpSemigroup
650
+ gap> S := Monoid([
651
+ > Matrix(IsProjectiveMaxPlusMatrix,
652
+ > [[-infinity, 0, -infinity],
653
+ > [-infinity, 0, -infinity],
654
+ > [-infinity, -infinity, 0]]),
655
+ > Matrix(IsProjectiveMaxPlusMatrix,
656
+ > [[0, -infinity, -infinity],
657
+ > [-infinity, -infinity, 0],
658
+ > [-infinity, -infinity, 0]])]);
659
+ <monoid of 3x3 projective max-plus matrices with 2 generators>
660
+ gap> T := AsSemigroup(IsFpSemigroup, S);
661
+ <fp semigroup with 3 generators and 9 relations of length 34>
662
+ gap> Size(S) = Size(T);
663
+ true
664
+ gap> NrDClasses(S) = NrDClasses(T);
665
+ true
666
+ gap> NrRClasses(S) = NrRClasses(T);
667
+ true
668
+ gap> NrLClasses(S) = NrLClasses(T);
669
+ true
670
+ gap> NrIdempotents(S) = NrIdempotents(T);
671
+ true
672
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
673
+ gap> BruteForceIsoCheck(map);
674
+ true
675
+ gap> BruteForceInverseCheck(map);
676
+ true
677
+
678
+ # AsSemigroup:
679
+ # convert from IsIntegerMatrixMonoid to IsFpSemigroup
680
+ gap> S := Monoid([
681
+ > Matrix(Integers,
682
+ > [[0, 1, 0],
683
+ > [0, 1, 0],
684
+ > [0, 0, 1]]),
685
+ > Matrix(Integers,
686
+ > [[1, 0, 0],
687
+ > [0, 0, 1],
688
+ > [0, 0, 1]])]);
689
+ <monoid of 3x3 integer matrices with 2 generators>
690
+ gap> T := AsSemigroup(IsFpSemigroup, S);
691
+ <fp semigroup with 3 generators and 9 relations of length 34>
692
+ gap> Size(S) = Size(T);
693
+ true
694
+ gap> NrDClasses(S) = NrDClasses(T);
695
+ true
696
+ gap> NrRClasses(S) = NrRClasses(T);
697
+ true
698
+ gap> NrLClasses(S) = NrLClasses(T);
699
+ true
700
+ gap> NrIdempotents(S) = NrIdempotents(T);
701
+ true
702
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
703
+ gap> BruteForceIsoCheck(map);
704
+ true
705
+ gap> BruteForceInverseCheck(map);
706
+ true
707
+
708
+ # AsSemigroup:
709
+ # convert from IsTropicalMaxPlusMatrixMonoid to IsFpSemigroup
710
+ gap> S := Monoid([
711
+ > Matrix(IsTropicalMaxPlusMatrix,
712
+ > [[-infinity, 0, -infinity],
713
+ > [-infinity, 0, -infinity],
714
+ > [-infinity, -infinity, 0]], 4),
715
+ > Matrix(IsTropicalMaxPlusMatrix,
716
+ > [[0, -infinity, -infinity],
717
+ > [-infinity, -infinity, 0],
718
+ > [-infinity, -infinity, 0]], 4)]);
719
+ <monoid of 3x3 tropical max-plus matrices with 2 generators>
720
+ gap> T := AsSemigroup(IsFpSemigroup, S);
721
+ <fp semigroup with 3 generators and 9 relations of length 34>
722
+ gap> Size(S) = Size(T);
723
+ true
724
+ gap> NrDClasses(S) = NrDClasses(T);
725
+ true
726
+ gap> NrRClasses(S) = NrRClasses(T);
727
+ true
728
+ gap> NrLClasses(S) = NrLClasses(T);
729
+ true
730
+ gap> NrIdempotents(S) = NrIdempotents(T);
731
+ true
732
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
733
+ gap> BruteForceIsoCheck(map);
734
+ true
735
+ gap> BruteForceInverseCheck(map);
736
+ true
737
+
738
+ # AsSemigroup:
739
+ # convert from IsTropicalMinPlusMatrixMonoid to IsFpSemigroup
740
+ gap> S := Monoid([
741
+ > Matrix(IsTropicalMinPlusMatrix,
742
+ > [[infinity, 0, infinity],
743
+ > [infinity, 0, infinity],
744
+ > [infinity, infinity, 0]], 2),
745
+ > Matrix(IsTropicalMinPlusMatrix,
746
+ > [[0, infinity, infinity],
747
+ > [infinity, infinity, 0],
748
+ > [infinity, infinity, 0]], 2)]);
749
+ <monoid of 3x3 tropical min-plus matrices with 2 generators>
750
+ gap> T := AsSemigroup(IsFpSemigroup, S);
751
+ <fp semigroup with 3 generators and 9 relations of length 34>
752
+ gap> Size(S) = Size(T);
753
+ true
754
+ gap> NrDClasses(S) = NrDClasses(T);
755
+ true
756
+ gap> NrRClasses(S) = NrRClasses(T);
757
+ true
758
+ gap> NrLClasses(S) = NrLClasses(T);
759
+ true
760
+ gap> NrIdempotents(S) = NrIdempotents(T);
761
+ true
762
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
763
+ gap> BruteForceIsoCheck(map);
764
+ true
765
+ gap> BruteForceInverseCheck(map);
766
+ true
767
+
768
+ # AsSemigroup:
769
+ # convert from IsNTPMatrixMonoid to IsFpSemigroup
770
+ gap> S := Monoid([
771
+ > Matrix(IsNTPMatrix,
772
+ > [[0, 1, 0],
773
+ > [0, 1, 0],
774
+ > [0, 0, 1]], 1, 1),
775
+ > Matrix(IsNTPMatrix,
776
+ > [[1, 0, 0],
777
+ > [0, 0, 1],
778
+ > [0, 0, 1]], 1, 1)]);
779
+ <monoid of 3x3 ntp matrices with 2 generators>
780
+ gap> T := AsSemigroup(IsFpSemigroup, S);
781
+ <fp semigroup with 3 generators and 9 relations of length 34>
782
+ gap> Size(S) = Size(T);
783
+ true
784
+ gap> NrDClasses(S) = NrDClasses(T);
785
+ true
786
+ gap> NrRClasses(S) = NrRClasses(T);
787
+ true
788
+ gap> NrLClasses(S) = NrLClasses(T);
789
+ true
790
+ gap> NrIdempotents(S) = NrIdempotents(T);
791
+ true
792
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
793
+ gap> BruteForceIsoCheck(map);
794
+ true
795
+ gap> BruteForceInverseCheck(map);
796
+ true
797
+
798
+ # AsMonoid:
799
+ # convert from IsPBRSemigroup to IsFpMonoid
800
+ gap> S := Semigroup([
801
+ > PBR([[-1], [-2], [-2], [-2], [-2]], [[1], [2, 3, 4, 5], [], [], []]),
802
+ > PBR([[-2], [-1], [-1], [-1], [-1]], [[2, 3, 4, 5], [1], [], [], []])]);
803
+ <pbr semigroup of degree 5 with 2 generators>
804
+ gap> T := AsMonoid(IsFpMonoid, S);
805
+ <fp monoid with 1 generator and 1 relation of length 3>
806
+ gap> Size(S) = Size(T);
807
+ true
808
+ gap> NrDClasses(S) = NrDClasses(T);
809
+ true
810
+ gap> NrRClasses(S) = NrRClasses(T);
811
+ true
812
+ gap> NrLClasses(S) = NrLClasses(T);
813
+ true
814
+ gap> NrIdempotents(S) = NrIdempotents(T);
815
+ true
816
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
817
+ gap> BruteForceIsoCheck(map);
818
+ true
819
+ gap> BruteForceInverseCheck(map);
820
+ true
821
+
822
+ # AsMonoid:
823
+ # convert from IsFpSemigroup to IsFpMonoid
824
+ gap> F := FreeSemigroup(2);; AssignGeneratorVariables(F);;
825
+ gap> rels := [[s1 ^ 2, s1], [s1 * s2, s2], [s2 * s1, s2], [s2 ^ 2, s1]];;
826
+ gap> S := F / rels;
827
+ <fp semigroup with 2 generators and 4 relations of length 14>
828
+ gap> T := AsMonoid(IsFpMonoid, S);
829
+ <fp monoid with 1 generator and 1 relation of length 3>
830
+ gap> Size(S) = Size(T);
831
+ true
832
+ gap> NrDClasses(S) = NrDClasses(T);
833
+ true
834
+ gap> NrRClasses(S) = NrRClasses(T);
835
+ true
836
+ gap> NrLClasses(S) = NrLClasses(T);
837
+ true
838
+ gap> NrIdempotents(S) = NrIdempotents(T);
839
+ true
840
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
841
+ gap> BruteForceIsoCheck(map);
842
+ true
843
+ gap> BruteForceInverseCheck(map);
844
+ true
845
+
846
+ # AsMonoid:
847
+ # convert from IsBipartitionSemigroup to IsFpMonoid
848
+ gap> S := Semigroup([
849
+ > Bipartition([[1, -1], [2, 3, 4, 5, -2], [-3], [-4], [-5]]),
850
+ > Bipartition([[1, -2], [2, 3, 4, 5, -1], [-3], [-4], [-5]])]);
851
+ <bipartition semigroup of degree 5 with 2 generators>
852
+ gap> T := AsMonoid(IsFpMonoid, S);
853
+ <fp monoid with 1 generator and 1 relation of length 3>
854
+ gap> Size(S) = Size(T);
855
+ true
856
+ gap> NrDClasses(S) = NrDClasses(T);
857
+ true
858
+ gap> NrRClasses(S) = NrRClasses(T);
859
+ true
860
+ gap> NrLClasses(S) = NrLClasses(T);
861
+ true
862
+ gap> NrIdempotents(S) = NrIdempotents(T);
863
+ true
864
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
865
+ gap> BruteForceIsoCheck(map);
866
+ true
867
+ gap> BruteForceInverseCheck(map);
868
+ true
869
+
870
+ # AsMonoid:
871
+ # convert from IsTransformationSemigroup to IsFpMonoid
872
+ gap> S := Semigroup([
873
+ > Transformation([1, 2, 2, 2, 2]), Transformation([2, 1, 1, 1, 1])]);
874
+ <transformation semigroup of degree 5 with 2 generators>
875
+ gap> T := AsMonoid(IsFpMonoid, S);
876
+ <fp monoid with 1 generator and 1 relation of length 3>
877
+ gap> Size(S) = Size(T);
878
+ true
879
+ gap> NrDClasses(S) = NrDClasses(T);
880
+ true
881
+ gap> NrRClasses(S) = NrRClasses(T);
882
+ true
883
+ gap> NrLClasses(S) = NrLClasses(T);
884
+ true
885
+ gap> NrIdempotents(S) = NrIdempotents(T);
886
+ true
887
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
888
+ gap> BruteForceIsoCheck(map);
889
+ true
890
+ gap> BruteForceInverseCheck(map);
891
+ true
892
+
893
+ # AsMonoid:
894
+ # convert from IsBooleanMatSemigroup to IsFpMonoid
895
+ gap> S := Semigroup([
896
+ > Matrix(IsBooleanMat,
897
+ > [[true, false, false, false, false],
898
+ > [false, true, false, false, false],
899
+ > [false, true, false, false, false],
900
+ > [false, true, false, false, false],
901
+ > [false, true, false, false, false]]),
902
+ > Matrix(IsBooleanMat,
903
+ > [[false, true, false, false, false],
904
+ > [true, false, false, false, false],
905
+ > [true, false, false, false, false],
906
+ > [true, false, false, false, false],
907
+ > [true, false, false, false, false]])]);
908
+ <semigroup of 5x5 boolean matrices with 2 generators>
909
+ gap> T := AsMonoid(IsFpMonoid, S);
910
+ <fp monoid with 1 generator and 1 relation of length 3>
911
+ gap> Size(S) = Size(T);
912
+ true
913
+ gap> NrDClasses(S) = NrDClasses(T);
914
+ true
915
+ gap> NrRClasses(S) = NrRClasses(T);
916
+ true
917
+ gap> NrLClasses(S) = NrLClasses(T);
918
+ true
919
+ gap> NrIdempotents(S) = NrIdempotents(T);
920
+ true
921
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
922
+ gap> BruteForceIsoCheck(map);
923
+ true
924
+ gap> BruteForceInverseCheck(map);
925
+ true
926
+
927
+ # AsMonoid:
928
+ # convert from IsMaxPlusMatrixSemigroup to IsFpMonoid
929
+ gap> S := Semigroup([
930
+ > Matrix(IsMaxPlusMatrix,
931
+ > [[0, -infinity, -infinity, -infinity, -infinity],
932
+ > [-infinity, 0, -infinity, -infinity, -infinity],
933
+ > [-infinity, 0, -infinity, -infinity, -infinity],
934
+ > [-infinity, 0, -infinity, -infinity, -infinity],
935
+ > [-infinity, 0, -infinity, -infinity, -infinity]]),
936
+ > Matrix(IsMaxPlusMatrix,
937
+ > [[-infinity, 0, -infinity, -infinity, -infinity],
938
+ > [0, -infinity, -infinity, -infinity, -infinity],
939
+ > [0, -infinity, -infinity, -infinity, -infinity],
940
+ > [0, -infinity, -infinity, -infinity, -infinity],
941
+ > [0, -infinity, -infinity, -infinity, -infinity]])]);
942
+ <semigroup of 5x5 max-plus matrices with 2 generators>
943
+ gap> T := AsMonoid(IsFpMonoid, S);
944
+ <fp monoid with 1 generator and 1 relation of length 3>
945
+ gap> Size(S) = Size(T);
946
+ true
947
+ gap> NrDClasses(S) = NrDClasses(T);
948
+ true
949
+ gap> NrRClasses(S) = NrRClasses(T);
950
+ true
951
+ gap> NrLClasses(S) = NrLClasses(T);
952
+ true
953
+ gap> NrIdempotents(S) = NrIdempotents(T);
954
+ true
955
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
956
+ gap> BruteForceIsoCheck(map);
957
+ true
958
+ gap> BruteForceInverseCheck(map);
959
+ true
960
+
961
+ # AsMonoid:
962
+ # convert from IsMinPlusMatrixSemigroup to IsFpMonoid
963
+ gap> S := Semigroup([
964
+ > Matrix(IsMinPlusMatrix,
965
+ > [[0, infinity, infinity, infinity, infinity],
966
+ > [infinity, 0, infinity, infinity, infinity],
967
+ > [infinity, 0, infinity, infinity, infinity],
968
+ > [infinity, 0, infinity, infinity, infinity],
969
+ > [infinity, 0, infinity, infinity, infinity]]),
970
+ > Matrix(IsMinPlusMatrix,
971
+ > [[infinity, 0, infinity, infinity, infinity],
972
+ > [0, infinity, infinity, infinity, infinity],
973
+ > [0, infinity, infinity, infinity, infinity],
974
+ > [0, infinity, infinity, infinity, infinity],
975
+ > [0, infinity, infinity, infinity, infinity]])]);
976
+ <semigroup of 5x5 min-plus matrices with 2 generators>
977
+ gap> T := AsMonoid(IsFpMonoid, S);
978
+ <fp monoid with 1 generator and 1 relation of length 3>
979
+ gap> Size(S) = Size(T);
980
+ true
981
+ gap> NrDClasses(S) = NrDClasses(T);
982
+ true
983
+ gap> NrRClasses(S) = NrRClasses(T);
984
+ true
985
+ gap> NrLClasses(S) = NrLClasses(T);
986
+ true
987
+ gap> NrIdempotents(S) = NrIdempotents(T);
988
+ true
989
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
990
+ gap> BruteForceIsoCheck(map);
991
+ true
992
+ gap> BruteForceInverseCheck(map);
993
+ true
994
+
995
+ # AsMonoid:
996
+ # convert from IsProjectiveMaxPlusMatrixSemigroup to IsFpMonoid
997
+ gap> S := Semigroup([
998
+ > Matrix(IsProjectiveMaxPlusMatrix,
999
+ > [[0, -infinity, -infinity, -infinity, -infinity],
1000
+ > [-infinity, 0, -infinity, -infinity, -infinity],
1001
+ > [-infinity, 0, -infinity, -infinity, -infinity],
1002
+ > [-infinity, 0, -infinity, -infinity, -infinity],
1003
+ > [-infinity, 0, -infinity, -infinity, -infinity]]),
1004
+ > Matrix(IsProjectiveMaxPlusMatrix,
1005
+ > [[-infinity, 0, -infinity, -infinity, -infinity],
1006
+ > [0, -infinity, -infinity, -infinity, -infinity],
1007
+ > [0, -infinity, -infinity, -infinity, -infinity],
1008
+ > [0, -infinity, -infinity, -infinity, -infinity],
1009
+ > [0, -infinity, -infinity, -infinity, -infinity]])]);
1010
+ <semigroup of 5x5 projective max-plus matrices with 2 generators>
1011
+ gap> T := AsMonoid(IsFpMonoid, S);
1012
+ <fp monoid with 1 generator and 1 relation of length 3>
1013
+ gap> Size(S) = Size(T);
1014
+ true
1015
+ gap> NrDClasses(S) = NrDClasses(T);
1016
+ true
1017
+ gap> NrRClasses(S) = NrRClasses(T);
1018
+ true
1019
+ gap> NrLClasses(S) = NrLClasses(T);
1020
+ true
1021
+ gap> NrIdempotents(S) = NrIdempotents(T);
1022
+ true
1023
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1024
+ gap> BruteForceIsoCheck(map);
1025
+ true
1026
+ gap> BruteForceInverseCheck(map);
1027
+ true
1028
+
1029
+ # AsMonoid:
1030
+ # convert from IsIntegerMatrixSemigroup to IsFpMonoid
1031
+ gap> S := Semigroup([
1032
+ > Matrix(Integers,
1033
+ > [[1, 0, 0, 0, 0],
1034
+ > [0, 1, 0, 0, 0],
1035
+ > [0, 1, 0, 0, 0],
1036
+ > [0, 1, 0, 0, 0],
1037
+ > [0, 1, 0, 0, 0]]),
1038
+ > Matrix(Integers,
1039
+ > [[0, 1, 0, 0, 0],
1040
+ > [1, 0, 0, 0, 0],
1041
+ > [1, 0, 0, 0, 0],
1042
+ > [1, 0, 0, 0, 0],
1043
+ > [1, 0, 0, 0, 0]])]);
1044
+ <semigroup of 5x5 integer matrices with 2 generators>
1045
+ gap> T := AsMonoid(IsFpMonoid, S);
1046
+ <fp monoid with 1 generator and 1 relation of length 3>
1047
+ gap> Size(S) = Size(T);
1048
+ true
1049
+ gap> NrDClasses(S) = NrDClasses(T);
1050
+ true
1051
+ gap> NrRClasses(S) = NrRClasses(T);
1052
+ true
1053
+ gap> NrLClasses(S) = NrLClasses(T);
1054
+ true
1055
+ gap> NrIdempotents(S) = NrIdempotents(T);
1056
+ true
1057
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1058
+ gap> BruteForceIsoCheck(map);
1059
+ true
1060
+ gap> BruteForceInverseCheck(map);
1061
+ true
1062
+
1063
+ # AsMonoid:
1064
+ # convert from IsTropicalMaxPlusMatrixSemigroup to IsFpMonoid
1065
+ gap> S := Semigroup([
1066
+ > Matrix(IsTropicalMaxPlusMatrix,
1067
+ > [[0, -infinity, -infinity, -infinity, -infinity],
1068
+ > [-infinity, 0, -infinity, -infinity, -infinity],
1069
+ > [-infinity, 0, -infinity, -infinity, -infinity],
1070
+ > [-infinity, 0, -infinity, -infinity, -infinity],
1071
+ > [-infinity, 0, -infinity, -infinity, -infinity]], 3),
1072
+ > Matrix(IsTropicalMaxPlusMatrix,
1073
+ > [[-infinity, 0, -infinity, -infinity, -infinity],
1074
+ > [0, -infinity, -infinity, -infinity, -infinity],
1075
+ > [0, -infinity, -infinity, -infinity, -infinity],
1076
+ > [0, -infinity, -infinity, -infinity, -infinity],
1077
+ > [0, -infinity, -infinity, -infinity, -infinity]], 3)]);
1078
+ <semigroup of 5x5 tropical max-plus matrices with 2 generators>
1079
+ gap> T := AsMonoid(IsFpMonoid, S);
1080
+ <fp monoid with 1 generator and 1 relation of length 3>
1081
+ gap> Size(S) = Size(T);
1082
+ true
1083
+ gap> NrDClasses(S) = NrDClasses(T);
1084
+ true
1085
+ gap> NrRClasses(S) = NrRClasses(T);
1086
+ true
1087
+ gap> NrLClasses(S) = NrLClasses(T);
1088
+ true
1089
+ gap> NrIdempotents(S) = NrIdempotents(T);
1090
+ true
1091
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1092
+ gap> BruteForceIsoCheck(map);
1093
+ true
1094
+ gap> BruteForceInverseCheck(map);
1095
+ true
1096
+
1097
+ # AsMonoid:
1098
+ # convert from IsTropicalMinPlusMatrixSemigroup to IsFpMonoid
1099
+ gap> S := Semigroup([
1100
+ > Matrix(IsTropicalMinPlusMatrix,
1101
+ > [[0, infinity, infinity, infinity, infinity],
1102
+ > [infinity, 0, infinity, infinity, infinity],
1103
+ > [infinity, 0, infinity, infinity, infinity],
1104
+ > [infinity, 0, infinity, infinity, infinity],
1105
+ > [infinity, 0, infinity, infinity, infinity]], 5),
1106
+ > Matrix(IsTropicalMinPlusMatrix,
1107
+ > [[infinity, 0, infinity, infinity, infinity],
1108
+ > [0, infinity, infinity, infinity, infinity],
1109
+ > [0, infinity, infinity, infinity, infinity],
1110
+ > [0, infinity, infinity, infinity, infinity],
1111
+ > [0, infinity, infinity, infinity, infinity]], 5)]);
1112
+ <semigroup of 5x5 tropical min-plus matrices with 2 generators>
1113
+ gap> T := AsMonoid(IsFpMonoid, S);
1114
+ <fp monoid with 1 generator and 1 relation of length 3>
1115
+ gap> Size(S) = Size(T);
1116
+ true
1117
+ gap> NrDClasses(S) = NrDClasses(T);
1118
+ true
1119
+ gap> NrRClasses(S) = NrRClasses(T);
1120
+ true
1121
+ gap> NrLClasses(S) = NrLClasses(T);
1122
+ true
1123
+ gap> NrIdempotents(S) = NrIdempotents(T);
1124
+ true
1125
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1126
+ gap> BruteForceIsoCheck(map);
1127
+ true
1128
+ gap> BruteForceInverseCheck(map);
1129
+ true
1130
+
1131
+ # AsMonoid:
1132
+ # convert from IsNTPMatrixSemigroup to IsFpMonoid
1133
+ gap> S := Semigroup([
1134
+ > Matrix(IsNTPMatrix,
1135
+ > [[1, 0, 0, 0, 0],
1136
+ > [0, 1, 0, 0, 0],
1137
+ > [0, 1, 0, 0, 0],
1138
+ > [0, 1, 0, 0, 0],
1139
+ > [0, 1, 0, 0, 0]], 5, 1),
1140
+ > Matrix(IsNTPMatrix,
1141
+ > [[0, 1, 0, 0, 0],
1142
+ > [1, 0, 0, 0, 0],
1143
+ > [1, 0, 0, 0, 0],
1144
+ > [1, 0, 0, 0, 0],
1145
+ > [1, 0, 0, 0, 0]], 5, 1)]);
1146
+ <semigroup of 5x5 ntp matrices with 2 generators>
1147
+ gap> T := AsMonoid(IsFpMonoid, S);
1148
+ <fp monoid with 1 generator and 1 relation of length 3>
1149
+ gap> Size(S) = Size(T);
1150
+ true
1151
+ gap> NrDClasses(S) = NrDClasses(T);
1152
+ true
1153
+ gap> NrRClasses(S) = NrRClasses(T);
1154
+ true
1155
+ gap> NrLClasses(S) = NrLClasses(T);
1156
+ true
1157
+ gap> NrIdempotents(S) = NrIdempotents(T);
1158
+ true
1159
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1160
+ gap> BruteForceIsoCheck(map);
1161
+ true
1162
+ gap> BruteForceInverseCheck(map);
1163
+ true
1164
+
1165
+ # AsMonoid:
1166
+ # convert from IsPBRMonoid to IsFpMonoid
1167
+ gap> S := Monoid([
1168
+ > PBR([[-3], [-2], [-3]], [[], [2], [1, 3]]),
1169
+ > PBR([[-2], [-2], [-1]], [[3], [1, 2], []])]);
1170
+ <pbr monoid of degree 3 with 2 generators>
1171
+ gap> T := AsMonoid(IsFpMonoid, S);
1172
+ <fp monoid with 2 generators and 6 relations of length 28>
1173
+ gap> Size(S) = Size(T);
1174
+ true
1175
+ gap> NrDClasses(S) = NrDClasses(T);
1176
+ true
1177
+ gap> NrRClasses(S) = NrRClasses(T);
1178
+ true
1179
+ gap> NrLClasses(S) = NrLClasses(T);
1180
+ true
1181
+ gap> NrIdempotents(S) = NrIdempotents(T);
1182
+ true
1183
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1184
+ gap> BruteForceIsoCheck(map);
1185
+ true
1186
+ gap> BruteForceInverseCheck(map);
1187
+ true
1188
+
1189
+ # AsMonoid:
1190
+ # convert from IsFpMonoid to IsFpMonoid
1191
+ gap> F := FreeMonoid(2);; AssignGeneratorVariables(F);;
1192
+ gap> rels := [[m1 ^ 2, m1], [m1 * m2 * m1, m1], [m1 * m2 ^ 2, m2 ^ 2],
1193
+ > [m2 * m1 * m2, m2], [m2 ^ 2 * m1, m2 ^ 2], [m2 ^ 3, m2 ^ 2]];;
1194
+ gap> S := F / rels;
1195
+ <fp monoid with 2 generators and 6 relations of length 28>
1196
+ gap> T := AsMonoid(IsFpMonoid, S);
1197
+ <fp monoid with 2 generators and 6 relations of length 28>
1198
+ gap> Size(S) = Size(T);
1199
+ true
1200
+ gap> NrDClasses(S) = NrDClasses(T);
1201
+ true
1202
+ gap> NrRClasses(S) = NrRClasses(T);
1203
+ true
1204
+ gap> NrLClasses(S) = NrLClasses(T);
1205
+ true
1206
+ gap> NrIdempotents(S) = NrIdempotents(T);
1207
+ true
1208
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1209
+ gap> BruteForceIsoCheck(map);
1210
+ true
1211
+ gap> BruteForceInverseCheck(map);
1212
+ true
1213
+
1214
+ # AsMonoid:
1215
+ # convert from IsBipartitionMonoid to IsFpMonoid
1216
+ gap> S := Monoid([
1217
+ > Bipartition([[1, 3, -3], [2, -2], [-1]]),
1218
+ > Bipartition([[1, 2, -2], [3, -1], [-3]])]);
1219
+ <bipartition monoid of degree 3 with 2 generators>
1220
+ gap> T := AsMonoid(IsFpMonoid, S);
1221
+ <fp monoid with 2 generators and 6 relations of length 28>
1222
+ gap> Size(S) = Size(T);
1223
+ true
1224
+ gap> NrDClasses(S) = NrDClasses(T);
1225
+ true
1226
+ gap> NrRClasses(S) = NrRClasses(T);
1227
+ true
1228
+ gap> NrLClasses(S) = NrLClasses(T);
1229
+ true
1230
+ gap> NrIdempotents(S) = NrIdempotents(T);
1231
+ true
1232
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1233
+ gap> BruteForceIsoCheck(map);
1234
+ true
1235
+ gap> BruteForceInverseCheck(map);
1236
+ true
1237
+
1238
+ # AsMonoid:
1239
+ # convert from IsTransformationMonoid to IsFpMonoid
1240
+ gap> S := Monoid([
1241
+ > Transformation([3, 2, 3]), Transformation([2, 2, 1])]);
1242
+ <transformation monoid of degree 3 with 2 generators>
1243
+ gap> T := AsMonoid(IsFpMonoid, S);
1244
+ <fp monoid with 2 generators and 6 relations of length 28>
1245
+ gap> Size(S) = Size(T);
1246
+ true
1247
+ gap> NrDClasses(S) = NrDClasses(T);
1248
+ true
1249
+ gap> NrRClasses(S) = NrRClasses(T);
1250
+ true
1251
+ gap> NrLClasses(S) = NrLClasses(T);
1252
+ true
1253
+ gap> NrIdempotents(S) = NrIdempotents(T);
1254
+ true
1255
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1256
+ gap> BruteForceIsoCheck(map);
1257
+ true
1258
+ gap> BruteForceInverseCheck(map);
1259
+ true
1260
+
1261
+ # AsMonoid:
1262
+ # convert from IsBooleanMatMonoid to IsFpMonoid
1263
+ gap> S := Monoid([
1264
+ > Matrix(IsBooleanMat,
1265
+ > [[false, false, true],
1266
+ > [false, true, false],
1267
+ > [false, false, true]]),
1268
+ > Matrix(IsBooleanMat,
1269
+ > [[false, true, false],
1270
+ > [false, true, false],
1271
+ > [true, false, false]])]);
1272
+ <monoid of 3x3 boolean matrices with 2 generators>
1273
+ gap> T := AsMonoid(IsFpMonoid, S);
1274
+ <fp monoid with 2 generators and 6 relations of length 28>
1275
+ gap> Size(S) = Size(T);
1276
+ true
1277
+ gap> NrDClasses(S) = NrDClasses(T);
1278
+ true
1279
+ gap> NrRClasses(S) = NrRClasses(T);
1280
+ true
1281
+ gap> NrLClasses(S) = NrLClasses(T);
1282
+ true
1283
+ gap> NrIdempotents(S) = NrIdempotents(T);
1284
+ true
1285
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1286
+ gap> BruteForceIsoCheck(map);
1287
+ true
1288
+ gap> BruteForceInverseCheck(map);
1289
+ true
1290
+
1291
+ # AsMonoid:
1292
+ # convert from IsMaxPlusMatrixMonoid to IsFpMonoid
1293
+ gap> S := Monoid([
1294
+ > Matrix(IsMaxPlusMatrix,
1295
+ > [[-infinity, -infinity, 0],
1296
+ > [-infinity, 0, -infinity],
1297
+ > [-infinity, -infinity, 0]]),
1298
+ > Matrix(IsMaxPlusMatrix,
1299
+ > [[-infinity, 0, -infinity],
1300
+ > [-infinity, 0, -infinity],
1301
+ > [0, -infinity, -infinity]])]);
1302
+ <monoid of 3x3 max-plus matrices with 2 generators>
1303
+ gap> T := AsMonoid(IsFpMonoid, S);
1304
+ <fp monoid with 2 generators and 6 relations of length 28>
1305
+ gap> Size(S) = Size(T);
1306
+ true
1307
+ gap> NrDClasses(S) = NrDClasses(T);
1308
+ true
1309
+ gap> NrRClasses(S) = NrRClasses(T);
1310
+ true
1311
+ gap> NrLClasses(S) = NrLClasses(T);
1312
+ true
1313
+ gap> NrIdempotents(S) = NrIdempotents(T);
1314
+ true
1315
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1316
+ gap> BruteForceIsoCheck(map);
1317
+ true
1318
+ gap> BruteForceInverseCheck(map);
1319
+ true
1320
+
1321
+ # AsMonoid:
1322
+ # convert from IsMinPlusMatrixMonoid to IsFpMonoid
1323
+ gap> S := Monoid([
1324
+ > Matrix(IsMinPlusMatrix,
1325
+ > [[infinity, infinity, 0],
1326
+ > [infinity, 0, infinity],
1327
+ > [infinity, infinity, 0]]),
1328
+ > Matrix(IsMinPlusMatrix,
1329
+ > [[infinity, 0, infinity],
1330
+ > [infinity, 0, infinity],
1331
+ > [0, infinity, infinity]])]);
1332
+ <monoid of 3x3 min-plus matrices with 2 generators>
1333
+ gap> T := AsMonoid(IsFpMonoid, S);
1334
+ <fp monoid with 2 generators and 6 relations of length 28>
1335
+ gap> Size(S) = Size(T);
1336
+ true
1337
+ gap> NrDClasses(S) = NrDClasses(T);
1338
+ true
1339
+ gap> NrRClasses(S) = NrRClasses(T);
1340
+ true
1341
+ gap> NrLClasses(S) = NrLClasses(T);
1342
+ true
1343
+ gap> NrIdempotents(S) = NrIdempotents(T);
1344
+ true
1345
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1346
+ gap> BruteForceIsoCheck(map);
1347
+ true
1348
+ gap> BruteForceInverseCheck(map);
1349
+ true
1350
+
1351
+ # AsMonoid:
1352
+ # convert from IsProjectiveMaxPlusMatrixMonoid to IsFpMonoid
1353
+ gap> S := Monoid([
1354
+ > Matrix(IsProjectiveMaxPlusMatrix,
1355
+ > [[-infinity, -infinity, 0],
1356
+ > [-infinity, 0, -infinity],
1357
+ > [-infinity, -infinity, 0]]),
1358
+ > Matrix(IsProjectiveMaxPlusMatrix,
1359
+ > [[-infinity, 0, -infinity],
1360
+ > [-infinity, 0, -infinity],
1361
+ > [0, -infinity, -infinity]])]);
1362
+ <monoid of 3x3 projective max-plus matrices with 2 generators>
1363
+ gap> T := AsMonoid(IsFpMonoid, S);
1364
+ <fp monoid with 2 generators and 6 relations of length 28>
1365
+ gap> Size(S) = Size(T);
1366
+ true
1367
+ gap> NrDClasses(S) = NrDClasses(T);
1368
+ true
1369
+ gap> NrRClasses(S) = NrRClasses(T);
1370
+ true
1371
+ gap> NrLClasses(S) = NrLClasses(T);
1372
+ true
1373
+ gap> NrIdempotents(S) = NrIdempotents(T);
1374
+ true
1375
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1376
+ gap> BruteForceIsoCheck(map);
1377
+ true
1378
+ gap> BruteForceInverseCheck(map);
1379
+ true
1380
+
1381
+ # AsMonoid:
1382
+ # convert from IsIntegerMatrixMonoid to IsFpMonoid
1383
+ gap> S := Monoid([
1384
+ > Matrix(Integers,
1385
+ > [[0, 0, 1],
1386
+ > [0, 1, 0],
1387
+ > [0, 0, 1]]),
1388
+ > Matrix(Integers,
1389
+ > [[0, 1, 0],
1390
+ > [0, 1, 0],
1391
+ > [1, 0, 0]])]);
1392
+ <monoid of 3x3 integer matrices with 2 generators>
1393
+ gap> T := AsMonoid(IsFpMonoid, S);
1394
+ <fp monoid with 2 generators and 6 relations of length 28>
1395
+ gap> Size(S) = Size(T);
1396
+ true
1397
+ gap> NrDClasses(S) = NrDClasses(T);
1398
+ true
1399
+ gap> NrRClasses(S) = NrRClasses(T);
1400
+ true
1401
+ gap> NrLClasses(S) = NrLClasses(T);
1402
+ true
1403
+ gap> NrIdempotents(S) = NrIdempotents(T);
1404
+ true
1405
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1406
+ gap> BruteForceIsoCheck(map);
1407
+ true
1408
+ gap> BruteForceInverseCheck(map);
1409
+ true
1410
+
1411
+ # AsMonoid:
1412
+ # convert from IsTropicalMaxPlusMatrixMonoid to IsFpMonoid
1413
+ gap> S := Monoid([
1414
+ > Matrix(IsTropicalMaxPlusMatrix,
1415
+ > [[-infinity, -infinity, 0],
1416
+ > [-infinity, 0, -infinity],
1417
+ > [-infinity, -infinity, 0]], 2),
1418
+ > Matrix(IsTropicalMaxPlusMatrix,
1419
+ > [[-infinity, 0, -infinity],
1420
+ > [-infinity, 0, -infinity],
1421
+ > [0, -infinity, -infinity]], 2)]);
1422
+ <monoid of 3x3 tropical max-plus matrices with 2 generators>
1423
+ gap> T := AsMonoid(IsFpMonoid, S);
1424
+ <fp monoid with 2 generators and 6 relations of length 28>
1425
+ gap> Size(S) = Size(T);
1426
+ true
1427
+ gap> NrDClasses(S) = NrDClasses(T);
1428
+ true
1429
+ gap> NrRClasses(S) = NrRClasses(T);
1430
+ true
1431
+ gap> NrLClasses(S) = NrLClasses(T);
1432
+ true
1433
+ gap> NrIdempotents(S) = NrIdempotents(T);
1434
+ true
1435
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1436
+ gap> BruteForceIsoCheck(map);
1437
+ true
1438
+ gap> BruteForceInverseCheck(map);
1439
+ true
1440
+
1441
+ # AsMonoid:
1442
+ # convert from IsTropicalMinPlusMatrixMonoid to IsFpMonoid
1443
+ gap> S := Monoid([
1444
+ > Matrix(IsTropicalMinPlusMatrix,
1445
+ > [[infinity, infinity, 0],
1446
+ > [infinity, 0, infinity],
1447
+ > [infinity, infinity, 0]],
1448
+ > 2),
1449
+ > Matrix(IsTropicalMinPlusMatrix,
1450
+ > [[infinity, 0, infinity],
1451
+ > [infinity, 0, infinity],
1452
+ > [0, infinity, infinity]],
1453
+ > 2)]);
1454
+ <monoid of 3x3 tropical min-plus matrices with 2 generators>
1455
+ gap> T := AsMonoid(IsFpMonoid, S);
1456
+ <fp monoid with 2 generators and 6 relations of length 28>
1457
+ gap> Size(S) = Size(T);
1458
+ true
1459
+ gap> NrDClasses(S) = NrDClasses(T);
1460
+ true
1461
+ gap> NrRClasses(S) = NrRClasses(T);
1462
+ true
1463
+ gap> NrLClasses(S) = NrLClasses(T);
1464
+ true
1465
+ gap> NrIdempotents(S) = NrIdempotents(T);
1466
+ true
1467
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1468
+ gap> BruteForceIsoCheck(map);
1469
+ true
1470
+ gap> BruteForceInverseCheck(map);
1471
+ true
1472
+
1473
+ # AsMonoid:
1474
+ # convert from IsNTPMatrixMonoid to IsFpMonoid
1475
+ gap> S := Monoid([
1476
+ > Matrix(IsNTPMatrix,
1477
+ > [[0, 0, 1],
1478
+ > [0, 1, 0],
1479
+ > [0, 0, 1]], 1, 4),
1480
+ > Matrix(IsNTPMatrix,
1481
+ > [[0, 1, 0],
1482
+ > [0, 1, 0],
1483
+ > [1, 0, 0]], 1, 4)]);
1484
+ <monoid of 3x3 ntp matrices with 2 generators>
1485
+ gap> T := AsMonoid(IsFpMonoid, S);
1486
+ <fp monoid with 2 generators and 6 relations of length 28>
1487
+ gap> Size(S) = Size(T);
1488
+ true
1489
+ gap> NrDClasses(S) = NrDClasses(T);
1490
+ true
1491
+ gap> NrRClasses(S) = NrRClasses(T);
1492
+ true
1493
+ gap> NrLClasses(S) = NrLClasses(T);
1494
+ true
1495
+ gap> NrIdempotents(S) = NrIdempotents(T);
1496
+ true
1497
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1498
+ gap> BruteForceIsoCheck(map);
1499
+ true
1500
+ gap> BruteForceInverseCheck(map);
1501
+ true
1502
+
1503
+ # AsSemigroup:
1504
+ # convert from IsReesMatrixSemigroup to IsFpSemigroup
1505
+ gap> R := ReesMatrixSemigroup(Group([(1, 2)]), [[(1, 2), (1, 2)],
1506
+ > [(), ()]]);
1507
+ <Rees matrix semigroup 2x2 over Group([ (1,2) ])>
1508
+ gap> T := AsSemigroup(IsFpSemigroup, R);
1509
+ <fp semigroup with 2 generators and 4 relations of length 19>
1510
+ gap> Size(R) = Size(T);
1511
+ true
1512
+ gap> NrDClasses(R) = NrDClasses(T);
1513
+ true
1514
+ gap> NrRClasses(R) = NrRClasses(T);
1515
+ true
1516
+ gap> NrLClasses(R) = NrLClasses(T);
1517
+ true
1518
+ gap> NrIdempotents(R) = NrIdempotents(T);
1519
+ true
1520
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, R);;
1521
+ gap> BruteForceIsoCheck(map);
1522
+ true
1523
+ gap> BruteForceInverseCheck(map);
1524
+ true
1525
+
1526
+ # AsMonoid
1527
+ # convert from IsReesMatrixSemigroup to IsFpMonoid
1528
+ gap> R := ReesMatrixSemigroup(Group([(1, 2)]), [[(1, 2)]]);
1529
+ <Rees matrix semigroup 1x1 over Group([ (1,2) ])>
1530
+ gap> T := AsMonoid(IsFpMonoid, R);
1531
+ <fp monoid with 1 generator and 1 relation of length 3>
1532
+ gap> Size(R) = Size(T);
1533
+ true
1534
+ gap> NrDClasses(R) = NrDClasses(T);
1535
+ true
1536
+ gap> NrRClasses(R) = NrRClasses(T);
1537
+ true
1538
+ gap> NrLClasses(R) = NrLClasses(T);
1539
+ true
1540
+ gap> NrIdempotents(R) = NrIdempotents(T);
1541
+ true
1542
+ gap> map := IsomorphismMonoid(IsFpMonoid, R);;
1543
+ gap> BruteForceIsoCheck(map);
1544
+ true
1545
+ gap> BruteForceInverseCheck(map);
1546
+ true
1547
+
1548
+ # AsSemigroup:
1549
+ # convert from IsReesZeroMatrixSemigroup to IsFpSemigroup
1550
+ gap> R := ReesZeroMatrixSemigroup(Group([(1, 2)]),
1551
+ > [[(1, 2), (1, 2)], [0, ()]]);
1552
+ <Rees 0-matrix semigroup 2x2 over Group([ (1,2) ])>
1553
+ gap> T := AsSemigroup(IsFpSemigroup, R);
1554
+ <fp semigroup with 3 generators and 11 relations of length 50>
1555
+ gap> Size(R) = Size(T);
1556
+ true
1557
+ gap> NrDClasses(R) = NrDClasses(T);
1558
+ true
1559
+ gap> NrRClasses(R) = NrRClasses(T);
1560
+ true
1561
+ gap> NrLClasses(R) = NrLClasses(T);
1562
+ true
1563
+ gap> NrIdempotents(R) = NrIdempotents(T);
1564
+ true
1565
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, R);;
1566
+ gap> BruteForceIsoCheck(map);
1567
+ true
1568
+ gap> BruteForceInverseCheck(map);
1569
+ true
1570
+
1571
+ # AsMonoid
1572
+ # convert from IsReesZeroMatrixSemigroup to IsFpMonoid
1573
+ gap> R := ReesZeroMatrixSemigroup(Group([(1, 2)]), [[(1, 2)]]);
1574
+ <Rees 0-matrix semigroup 1x1 over Group([ (1,2) ])>
1575
+ gap> T := AsMonoid(IsFpMonoid, R);
1576
+ <fp monoid with 2 generators and 4 relations of length 13>
1577
+ gap> Size(R) = Size(T);
1578
+ true
1579
+ gap> NrDClasses(R) = NrDClasses(T);
1580
+ true
1581
+ gap> NrRClasses(R) = NrRClasses(T);
1582
+ true
1583
+ gap> NrLClasses(R) = NrLClasses(T);
1584
+ true
1585
+ gap> NrIdempotents(R) = NrIdempotents(T);
1586
+ true
1587
+ gap> map := IsomorphismMonoid(IsFpMonoid, R);;
1588
+ gap> BruteForceIsoCheck(map);
1589
+ true
1590
+ gap> BruteForceInverseCheck(map);
1591
+ true
1592
+
1593
+ # AsSemigroup:
1594
+ # convert from graph inverse to IsFpSemigroup
1595
+ gap> S := GraphInverseSemigroup(Digraph([[2], []]));
1596
+ <finite graph inverse semigroup with 2 vertices, 1 edge>
1597
+ gap> T := AsSemigroup(IsFpSemigroup, S);
1598
+ <fp semigroup with 4 generators and 16 relations of length 63>
1599
+ gap> Size(S) = Size(T);
1600
+ true
1601
+ gap> NrDClasses(S) = NrDClasses(T);
1602
+ true
1603
+ gap> NrRClasses(S) = NrRClasses(T);
1604
+ true
1605
+ gap> NrLClasses(S) = NrLClasses(T);
1606
+ true
1607
+ gap> NrIdempotents(S) = NrIdempotents(T);
1608
+ true
1609
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
1610
+ gap> BruteForceIsoCheck(map);
1611
+ true
1612
+ gap> BruteForceInverseCheck(map);
1613
+ true
1614
+
1615
+ # AsSemigroup:
1616
+ # convert from perm group to IsFpSemigroup
1617
+ gap> S := DihedralGroup(IsPermGroup, 6);
1618
+ Group([ (1,2,3), (2,3) ])
1619
+ gap> T := AsSemigroup(IsFpSemigroup, S);
1620
+ <fp semigroup with 5 generators and 16 relations of length 57>
1621
+ gap> Size(S) = Size(T);
1622
+ true
1623
+ gap> NrDClasses(S) = NrDClasses(T);
1624
+ true
1625
+ gap> NrRClasses(S) = NrRClasses(T);
1626
+ true
1627
+ gap> NrLClasses(S) = NrLClasses(T);
1628
+ true
1629
+ gap> NrIdempotents(S) = NrIdempotents(T);
1630
+ true
1631
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
1632
+ gap> BruteForceIsoCheck(map);
1633
+ true
1634
+ gap> BruteForceInverseCheck(map);
1635
+ true
1636
+
1637
+ # AsSemigroup:
1638
+ # convert from perm group to IsFpMonoid
1639
+ gap> S := DihedralGroup(IsPermGroup, 6);
1640
+ Group([ (1,2,3), (2,3) ])
1641
+ gap> T := AsMonoid(IsFpMonoid, S);
1642
+ <fp monoid with 4 generators and 7 relations of length 22>
1643
+ gap> Size(S) = Size(T);
1644
+ true
1645
+ gap> NrDClasses(S) = NrDClasses(T);
1646
+ true
1647
+ gap> NrRClasses(S) = NrRClasses(T);
1648
+ true
1649
+ gap> NrLClasses(S) = NrLClasses(T);
1650
+ true
1651
+ gap> NrIdempotents(S) = NrIdempotents(T);
1652
+ true
1653
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1654
+ gap> BruteForceIsoCheck(map);
1655
+ true
1656
+ gap> BruteForceInverseCheck(map);
1657
+ true
1658
+
1659
+ # AsSemigroup:
1660
+ # convert from non-perm group to IsFpSemigroup
1661
+ gap> S := DihedralGroup(6);
1662
+ <pc group of size 6 with 2 generators>
1663
+ gap> T := AsSemigroup(IsFpSemigroup, S);
1664
+ <fp semigroup with 5 generators and 16 relations of length 57>
1665
+ gap> Size(S) = Size(T);
1666
+ true
1667
+ gap> NrDClasses(S) = NrDClasses(T);
1668
+ true
1669
+ gap> NrRClasses(S) = NrRClasses(T);
1670
+ true
1671
+ gap> NrLClasses(S) = NrLClasses(T);
1672
+ true
1673
+ gap> NrIdempotents(S) = NrIdempotents(T);
1674
+ true
1675
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
1676
+ gap> BruteForceIsoCheck(map);
1677
+ true
1678
+ gap> BruteForceInverseCheck(map);
1679
+ true
1680
+
1681
+ # AsSemigroup:
1682
+ # convert from non-perm group to IsFpMonoid
1683
+ gap> S := DihedralGroup(6);
1684
+ <pc group of size 6 with 2 generators>
1685
+ gap> T := AsMonoid(IsFpMonoid, S);
1686
+ <fp monoid with 4 generators and 7 relations of length 22>
1687
+ gap> Size(S) = Size(T);
1688
+ true
1689
+ gap> NrDClasses(S) = NrDClasses(T);
1690
+ true
1691
+ gap> NrRClasses(S) = NrRClasses(T);
1692
+ true
1693
+ gap> NrLClasses(S) = NrLClasses(T);
1694
+ true
1695
+ gap> NrIdempotents(S) = NrIdempotents(T);
1696
+ true
1697
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1698
+ gap> BruteForceIsoCheck(map);
1699
+ true
1700
+ gap> BruteForceInverseCheck(map);
1701
+ true
1702
+
1703
+ # AsSemigroup:
1704
+ # convert from IsBlockBijectionSemigroup to IsFpSemigroup
1705
+ gap> S := InverseSemigroup(Bipartition([[1, -1, -3], [2, 3, -2]]));;
1706
+ gap> T := AsSemigroup(IsFpSemigroup, S);
1707
+ <fp semigroup with 2 generators and 6 relations of length 29>
1708
+ gap> Size(S) = Size(T);
1709
+ true
1710
+ gap> NrDClasses(S) = NrDClasses(T);
1711
+ true
1712
+ gap> NrRClasses(S) = NrRClasses(T);
1713
+ true
1714
+ gap> NrLClasses(S) = NrLClasses(T);
1715
+ true
1716
+ gap> NrIdempotents(S) = NrIdempotents(T);
1717
+ true
1718
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
1719
+ gap> BruteForceIsoCheck(map);
1720
+ true
1721
+ gap> BruteForceInverseCheck(map);
1722
+ true
1723
+
1724
+ # AsSemigroup:
1725
+ # convert from IsBlockBijectionMonoid to IsFpMonoid
1726
+ gap> S := InverseMonoid([
1727
+ > Bipartition([[1, -1, -3], [2, 3, -2]])]);;
1728
+ gap> T := AsMonoid(IsFpMonoid, S);
1729
+ <fp monoid with 2 generators and 6 relations of length 29>
1730
+ gap> Size(S) = Size(T);
1731
+ true
1732
+ gap> NrDClasses(S) = NrDClasses(T);
1733
+ true
1734
+ gap> NrRClasses(S) = NrRClasses(T);
1735
+ true
1736
+ gap> NrLClasses(S) = NrLClasses(T);
1737
+ true
1738
+ gap> NrIdempotents(S) = NrIdempotents(T);
1739
+ true
1740
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1741
+ gap> BruteForceIsoCheck(map);
1742
+ true
1743
+ gap> BruteForceInverseCheck(map);
1744
+ true
1745
+
1746
+ # AsSemigroup:
1747
+ # convert from IsBlockBijectionMonoid to IsFpSemigroup
1748
+ gap> S := InverseMonoid([
1749
+ > Bipartition([[1, -1, -3], [2, 3, -2]])]);;
1750
+ gap> T := AsSemigroup(IsFpSemigroup, S);
1751
+ <fp semigroup with 3 generators and 11 relations of length 45>
1752
+ gap> Size(S) = Size(T);
1753
+ true
1754
+ gap> NrDClasses(S) = NrDClasses(T);
1755
+ true
1756
+ gap> NrRClasses(S) = NrRClasses(T);
1757
+ true
1758
+ gap> NrLClasses(S) = NrLClasses(T);
1759
+ true
1760
+ gap> NrIdempotents(S) = NrIdempotents(T);
1761
+ true
1762
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
1763
+ gap> BruteForceIsoCheck(map);
1764
+ true
1765
+ gap> BruteForceInverseCheck(map);
1766
+ true
1767
+
1768
+ # AsSemigroup:
1769
+ # convert from IsPartialPermSemigroup to IsFpSemigroup
1770
+ gap> S := InverseSemigroup(PartialPerm([1, 2], [2, 1]),
1771
+ > PartialPerm([1, 2], [3, 1]));
1772
+ <inverse partial perm semigroup of rank 3 with 2 generators>
1773
+ gap> T := AsSemigroup(IsFpSemigroup, S);
1774
+ <fp semigroup with 3 generators and 15 relations of length 87>
1775
+ gap> Size(S) = Size(T);
1776
+ true
1777
+ gap> NrDClasses(S) = NrDClasses(T);
1778
+ true
1779
+ gap> NrRClasses(S) = NrRClasses(T);
1780
+ true
1781
+ gap> NrLClasses(S) = NrLClasses(T);
1782
+ true
1783
+ gap> NrIdempotents(S) = NrIdempotents(T);
1784
+ true
1785
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
1786
+ gap> BruteForceIsoCheck(map);
1787
+ true
1788
+ gap> BruteForceInverseCheck(map);
1789
+ true
1790
+
1791
+ # AsSemigroup:
1792
+ # convert from IsPartialPermMonoid to IsFpMonoid
1793
+ gap> S := InverseMonoid(PartialPerm([1, 2], [2, 1]),
1794
+ > PartialPerm([1, 2], [3, 1]));
1795
+ <inverse partial perm monoid of rank 3 with 2 generators>
1796
+ gap> T := AsMonoid(IsFpMonoid, S);
1797
+ <fp monoid with 3 generators and 15 relations of length 87>
1798
+ gap> Size(S) = Size(T);
1799
+ true
1800
+ gap> NrDClasses(S) = NrDClasses(T);
1801
+ true
1802
+ gap> NrRClasses(S) = NrRClasses(T);
1803
+ true
1804
+ gap> NrLClasses(S) = NrLClasses(T);
1805
+ true
1806
+ gap> NrIdempotents(S) = NrIdempotents(T);
1807
+ true
1808
+ gap> map := IsomorphismMonoid(IsFpMonoid, S);;
1809
+ gap> BruteForceIsoCheck(map);
1810
+ true
1811
+ gap> BruteForceInverseCheck(map);
1812
+ true
1813
+
1814
+ # AsSemigroup:
1815
+ # convert from IsPartialPermMonoid to IsFpSemigroup
1816
+ gap> S := InverseMonoid(PartialPerm([1, 2], [2, 1]),
1817
+ > PartialPerm([1, 2], [3, 1]));
1818
+ <inverse partial perm monoid of rank 3 with 2 generators>
1819
+ gap> T := AsSemigroup(IsFpSemigroup, S);
1820
+ <fp semigroup with 4 generators and 22 relations of length 109>
1821
+ gap> Size(S) = Size(T);
1822
+ true
1823
+ gap> NrDClasses(S) = NrDClasses(T);
1824
+ true
1825
+ gap> NrRClasses(S) = NrRClasses(T);
1826
+ true
1827
+ gap> NrLClasses(S) = NrLClasses(T);
1828
+ true
1829
+ gap> NrIdempotents(S) = NrIdempotents(T);
1830
+ true
1831
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, S);;
1832
+ gap> BruteForceIsoCheck(map);
1833
+ true
1834
+ gap> BruteForceInverseCheck(map);
1835
+ true
1836
+
1837
+ # finite group to fp semigroup
1838
+ gap> G := AlternatingGroup(5);;
1839
+ gap> map := IsomorphismSemigroup(IsFpSemigroup, G);;
1840
+ gap> BruteForceIsoCheck(map);
1841
+ true
1842
+ gap> BruteForceInverseCheck(map);
1843
+ true
1844
+
1845
+ # finite group to fp monoid
1846
+ gap> G := AlternatingGroup(5);;
1847
+ gap> map := IsomorphismMonoid(IsFpMonoid, G);;
1848
+ gap> BruteForceIsoCheck(map);
1849
+ true
1850
+ gap> BruteForceInverseCheck(map);
1851
+ true
1852
+
1853
+ #
1854
+ gap> S := Semigroup([
1855
+ > Transformation([2, 4, 3, 4]),
1856
+ > Transformation([3, 3, 2, 3]),
1857
+ > Transformation([3, 4, 4, 1])]);;
1858
+ gap> F := AsSemigroup(IsFpSemigroup, S);;
1859
+ gap> x := F.1 * F.2 * F.3; y := F.2 ^ 2 * F.3;
1860
+ s1*s2*s3
1861
+ s2^2*s3
1862
+ gap> x = y;
1863
+ true
1864
+ gap> x := F.2 ^ 2 * F.1 * F.2 ^ 2 * F.3; y := F.1 ^ 2 * F.2 * F.3 ^ 4;
1865
+ s2^2*s1*s2^2*s3
1866
+ s1^2*s2*s3^4
1867
+ gap> x = y;
1868
+ true
1869
+ gap> x := F.1 * F.1; y := F.2 * F.3;
1870
+ s1^2
1871
+ s2*s3
1872
+ gap> x = y;
1873
+ false
1874
+
1875
+ # Test IsomorphismFpMonoid for semigroup with duplicate generators
1876
+ gap> S := Semigroup(Matrix(IsBooleanMat,
1877
+ > [[0, 1],
1878
+ > [1, 0]]),
1879
+ > Matrix(IsBooleanMat,
1880
+ > [[1, 0],
1881
+ > [1, 1]]),
1882
+ > Matrix(IsBooleanMat,
1883
+ > [[1, 0],
1884
+ > [0, 0]]),
1885
+ > Matrix(IsBooleanMat,
1886
+ > [[1, 0],
1887
+ > [0, 0]]));;
1888
+ gap> T := AsMonoid(IsFpMonoid, S);
1889
+ <fp monoid with 4 generators and 19 relations of length 95>
1890
+ gap> RelationsOfFpMonoid(T);
1891
+ [ [ m1^2, <identity ...> ], [ m4, m3 ], [ m1*m4, m1*m3 ], [ m2^2, m2 ],
1892
+ [ m2*m4, m2*m3 ], [ m3*m2, m3 ], [ m3^2, m3 ], [ m3*m4, m3 ],
1893
+ [ m1*m2*m3, m2*m3 ], [ m2*m1^2, m2 ], [ m2*m1*m3, m1*m3 ], [ m3*m1^2, m3 ],
1894
+ [ (m1*m2)^2, m2*m1*m2 ], [ (m1*m3)^2, m3*m1*m3 ], [ (m2*m1)^2, m2*m1*m2 ],
1895
+ [ m2*m3*m1*m2, m2*m1*m2 ], [ m2*m3*m1*m3, m3*m1*m3 ],
1896
+ [ m3*m1*m2*m1, m3*m1*m2 ], [ (m3*m1)^2, m3*m1*m3 ] ]
1897
+ gap> Size(T);
1898
+ 16
1899
+ gap> T := AsSemigroup(IsFpSemigroup, S);
1900
+ <fp semigroup with 4 generators and 21 relations of length 105>
1901
+ gap> RelationsOfFpSemigroup(T);
1902
+ [ [ s4, s3 ], [ s1*s4, s1*s3 ], [ s2^2, s2 ], [ s2*s4, s2*s3 ],
1903
+ [ s3*s2, s3 ], [ s3^2, s3 ], [ s3*s4, s3 ], [ s1^3, s1 ], [ s1^2*s2, s2 ],
1904
+ [ s1^2*s3, s3 ], [ s1*s2*s3, s2*s3 ], [ s2*s1^2, s2 ], [ s2*s1*s3, s1*s3 ],
1905
+ [ s3*s1^2, s3 ], [ (s1*s2)^2, s2*s1*s2 ], [ (s1*s3)^2, s3*s1*s3 ],
1906
+ [ (s2*s1)^2, s2*s1*s2 ], [ s2*s3*s1*s2, s2*s1*s2 ],
1907
+ [ s2*s3*s1*s3, s3*s1*s3 ], [ s3*s1*s2*s1, s3*s1*s2 ],
1908
+ [ (s3*s1)^2, s3*s1*s3 ] ]
1909
+ gap> Size(T);
1910
+ 16
1911
+
1912
+ # Test IsomorphismFpSemigroup for semigroup with multiple duplicate generators
1913
+ gap> S := Semigroup([
1914
+ > Matrix(IsBooleanMat,
1915
+ > [[0, 1],
1916
+ > [1, 0]]),
1917
+ > Matrix(IsBooleanMat,
1918
+ > [[1, 0],
1919
+ > [1, 1]]),
1920
+ > Matrix(IsBooleanMat,
1921
+ > [[1, 0],
1922
+ > [1, 1]]),
1923
+ > Matrix(IsBooleanMat,
1924
+ > [[1, 0],
1925
+ > [0, 0]]),
1926
+ > Matrix(IsBooleanMat,
1927
+ > [[1, 0],
1928
+ > [0, 0]]),
1929
+ > Matrix(IsBooleanMat,
1930
+ > [[0, 1],
1931
+ > [1, 0]]),
1932
+ > Matrix(IsBooleanMat,
1933
+ > [[1, 0],
1934
+ > [0, 0]]),
1935
+ > Matrix(IsBooleanMat,
1936
+ > [[1, 0],
1937
+ > [1, 1]]),
1938
+ > Matrix(IsBooleanMat,
1939
+ > [[1, 0],
1940
+ > [0, 0]]),
1941
+ > Matrix(IsBooleanMat,
1942
+ > [[1, 0],
1943
+ > [0, 0]]),
1944
+ > Matrix(IsBooleanMat,
1945
+ > [[0, 1],
1946
+ > [1, 0]])]);;
1947
+ gap> T := AsSemigroup(IsFpSemigroup, S);;
1948
+ gap> Size(T) = Size(S);
1949
+ true
1950
+
1951
+ # Test ExtRepOfObj for an element of an fp monoid
1952
+ gap> S := RegularBooleanMatMonoid(2);;
1953
+ gap> T := AsMonoid(IsFpMonoid, S);;
1954
+ gap> ExtRepOfObj(T.1);
1955
+ [ 1, 1 ]
1956
+
1957
+ # Test RandomSemigroup
1958
+ gap> RandomSemigroup(IsFpSemigroup);;
1959
+ gap> RandomSemigroup(IsFpSemigroup, 3);;
1960
+ gap> RandomSemigroup(IsFpSemigroup, 5, 5);;
1961
+ gap> RandomSemigroup(IsFpSemigroup, "a");
1962
+ Error, the arguments must be positive integers
1963
+
1964
+ # Test RandomMonoid
1965
+ gap> RandomMonoid(IsFpMonoid);;
1966
+ gap> RandomMonoid(IsFpMonoid, 3);;
1967
+ gap> RandomMonoid(IsFpMonoid, 5, 5);;
1968
+ gap> RandomMonoid(IsFpMonoid, "a");
1969
+ Error, the arguments must be positive integers
1970
+
1971
+ # Test RandomInverseSemigroup
1972
+ gap> RandomInverseSemigroup(IsFpSemigroup);;
1973
+ gap> RandomInverseSemigroup(IsFpSemigroup, 3);;
1974
+ gap> RandomInverseSemigroup(IsFpSemigroup, 5, 5);;
1975
+ gap> RandomInverseSemigroup(IsFpSemigroup, "a");
1976
+ Error, the arguments must be positive integers
1977
+
1978
+ # Test RandomInverseMonoid
1979
+ gap> RandomInverseMonoid(IsFpMonoid);;
1980
+ gap> RandomInverseMonoid(IsFpMonoid, 3);;
1981
+ gap> RandomInverseMonoid(IsFpMonoid, 5, 5);;
1982
+ gap> RandomInverseMonoid(IsFpMonoid, "a");
1983
+ Error, the arguments must be positive integers
1984
+
1985
+ # Test AsMonoid
1986
+ gap> S := SingularTransformationMonoid(3);
1987
+ <regular transformation semigroup ideal of degree 3 with 1 generator>
1988
+ gap> GeneratorsOfSemigroup(S);;
1989
+ gap> S := AsSemigroup(IsFpSemigroup, S);;
1990
+ gap> AsMonoid(S);
1991
+ fail
1992
+ gap> S := Semigroup(Transformation([1, 2, 3, 3, 3]));
1993
+ <commutative transformation semigroup of degree 5 with 1 generator>
1994
+ gap> S := AsSemigroup(IsFpSemigroup, S);
1995
+ <fp semigroup with 1 generator and 1 relation of length 4>
1996
+ gap> AsMonoid(S);;
1997
+
1998
+ # Test IsomorphismFpMonoid, fail
1999
+ gap> S := SingularTransformationMonoid(3);
2000
+ <regular transformation semigroup ideal of degree 3 with 1 generator>
2001
+ gap> IsomorphismFpMonoid(S);
2002
+ Error, the 1st argument (a semigroup) must satisfy `IsMonoidAsSemigroup`
2003
+
2004
+ # Test MultiplicativeZero
2005
+ gap> F := FreeSemigroup(2);;
2006
+ gap> S := F / [[F.1, F.2 * F.1], [F.1, F.1 * F.2], [F.1 ^ 2, F.1]];;
2007
+ gap> MultiplicativeZero(S) = S.1;
2008
+ true
2009
+ gap> F := FreeMonoid(2);;
2010
+ gap> S := F / [[F.1, F.2 * F.1], [F.1, F.1 * F.2], [F.1 ^ 2, F.1]];;
2011
+ gap> MultiplicativeZero(S) = S.1;
2012
+ true
2013
+
2014
+ # Test SEMIGROUPS.WordToExtRepWord
2015
+ gap> w := [1 .. 100] * 0 + 1;
2016
+ [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2017
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2018
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2019
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
2020
+ gap> SEMIGROUPS.WordToExtRepObj(w);
2021
+ [ 1, 100 ]
2022
+ gap> w := Concatenation(w, [1 .. 50] * 0 + 2);
2023
+ [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2024
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2025
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2026
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2027
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2028
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ]
2029
+ gap> SEMIGROUPS.WordToExtRepObj(w);
2030
+ [ 1, 100, 2, 50 ]
2031
+ gap> w := Concatenation(w, [1] * 3);
2032
+ [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2033
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2034
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2035
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2036
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2037
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2038
+ 3 ]
2039
+ gap> SEMIGROUPS.WordToExtRepObj(w);
2040
+ [ 1, 100, 2, 50, 3, 1 ]
2041
+ gap> w := Concatenation(w, [1 .. 4] * 0 + 1);
2042
+ [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2043
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2044
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2045
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2046
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2047
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2048
+ 3, 1, 1, 1, 1 ]
2049
+ gap> SEMIGROUPS.WordToExtRepObj(w);
2050
+ [ 1, 100, 2, 50, 3, 1, 1, 4 ]
2051
+
2052
+ # Test SEMIGROUPS.WordToString
2053
+ gap> w := [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2054
+ > 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2055
+ > 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2056
+ > 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2057
+ > 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2058
+ > 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 1,
2059
+ > 1, 1, 1, 1, 1, 1, 1];;
2060
+ gap> SEMIGROUPS.WordToString(w);
2061
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
2062
+ aaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcaaaa\
2063
+ aaaa"
2064
+ gap> SEMIGROUPS.WordToString([100]);
2065
+ Error, the argument be at most 52
2066
+
2067
+ # Test SEMIGROUPS.ExtRepObjToString
2068
+ gap> SEMIGROUPS.ExtRepObjToString(SEMIGROUPS.WordToExtRepObj(w));
2069
+ "a ^ 100b ^ 50ca ^ 8"
2070
+ gap> SEMIGROUPS.ExtRepObjToString([100, 1]);
2071
+ Error, the maximum value in an odd position of the argument must be at most 52
2072
+
2073
+ # Test IsomorphismFpSemigroup (for factorizable inverse monoids)
2074
+ gap> S := SymmetricInverseMonoid(4);;
2075
+ gap> iso := IsomorphismFpSemigroup(S);;
2076
+ gap> BruteForceIsoCheck(iso);
2077
+ true
2078
+ gap> BruteForceInverseCheck(iso);
2079
+ true
2080
+ gap> S := InverseSemigroup(
2081
+ > [PartialPerm([1, 2, 3, 4, 5, 6, 7, 8], [2, 4, 8, 6, 3, 1, 5, 7]),
2082
+ > PartialPerm([1, 2, 3, 4, 5, 6, 7, 8], [3, 5, 4, 7, 6, 8, 1, 2]),
2083
+ > PartialPerm([1, 2, 3, 4, 5, 6, 7, 8], [4, 6, 7, 1, 8, 2, 3, 5]),
2084
+ > PartialPerm([], [])]);;
2085
+ gap> iso := IsomorphismFpSemigroup(S);;
2086
+ gap> BruteForceIsoCheck(iso);
2087
+ true
2088
+ gap> BruteForceInverseCheck(iso);
2089
+ true
2090
+ gap> S := InverseSemigroup(
2091
+ > [PartialPerm([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [9, 10, 8, 2, 1, 7, 5, 4, 6, 3]),
2092
+ > PartialPerm([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [10, 9, 3, 6, 5, 2, 8, 1, 4, 7]),
2093
+ > PartialPerm([], [])]);;
2094
+ gap> iso := IsomorphismFpSemigroup(S);;
2095
+ gap> BruteForceIsoCheck(iso);
2096
+ true
2097
+ gap> BruteForceInverseCheck(iso);
2098
+ true
2099
+ gap> tst := [InverseMonoid([PartialPerm([1, 2, 3, 4, 5], [4, 5, 2, 3, 1]),
2100
+ > PartialPerm([1, 3], [1, 3])]),
2101
+ > InverseMonoid([PartialPerm([1, 2, 3, 4], [1, 2, 3, 4]),
2102
+ > PartialPerm([1, 2, 3, 4, 5], [3, 1, 5, 4, 2])]),
2103
+ > InverseMonoid([PartialPerm([1, 2, 3, 4, 5], [5, 4, 2, 3, 1]),
2104
+ > PartialPerm([1, 2, 4], [1, 2, 4])]),
2105
+ > InverseMonoid([PartialPerm([1, 2, 5], [2, 1, 5]),
2106
+ > PartialPerm([1, 2], [1, 2])]),
2107
+ > InverseMonoid([PartialPerm([1, 2, 3], [1, 4, 5]),
2108
+ > PartialPerm([1, 2, 3, 4, 5], [1, 5, 4, 2, 3])]),
2109
+ > InverseMonoid([PartialPerm([1, 2, 3, 4, 5], [3, 1, 5, 4, 2]),
2110
+ > PartialPerm([1, 2, 3, 4, 5], [5, 1, 3, 4, 2])]),
2111
+ > InverseMonoid([PartialPerm([1, 2, 5], [2, 3, 5]),
2112
+ > PartialPerm([1, 2, 3, 5], [2, 3, 1, 5])]),
2113
+ > InverseMonoid([PartialPerm([1, 2, 3, 4, 5], [4, 2, 3, 1, 5]),
2114
+ > PartialPerm([1, 2, 3, 4, 5], [5, 3, 2, 1, 4])]),
2115
+ > InverseMonoid([PartialPerm([1, 2, 3, 5], [2, 1, 3, 5]),
2116
+ > PartialPerm([1, 2, 3, 5], [5, 2, 1, 3])]),
2117
+ > InverseMonoid([PartialPerm([1, 2, 3], [5, 4, 1]),
2118
+ > PartialPerm([1, 2, 3, 4, 5], [2, 3, 5, 1, 4])]),
2119
+ > InverseMonoid([PartialPerm([1, 2, 3, 4, 5], [4, 3, 5, 2, 1]),
2120
+ > PartialPerm([1, 2, 4, 5], [5, 4, 2, 1]),
2121
+ > PartialPerm([1, 4], [3, 2]), PartialPerm([1, 2, 3, 4, 5], [2, 3, 5, 1, 4]),
2122
+ > PartialPerm([1, 2, 5], [2, 3, 4])]),
2123
+ > InverseMonoid([PartialPerm([1, 2, 3, 4, 5], [2, 4, 1, 5, 3]),
2124
+ > PartialPerm([1, 3, 4], [2, 1, 3]),
2125
+ > PartialPerm([1, 2, 3, 4, 5], [4, 1, 2, 5, 3]), PartialPerm([1, 3], [5, 4]),
2126
+ > PartialPerm([1, 3, 5], [2, 4, 1])])];;
2127
+ gap> ForAll(tst, IsFactorisableInverseMonoid);
2128
+ true
2129
+ gap> ForAll(tst, S -> BruteForceIsoCheck(IsomorphismFpSemigroup(S)));
2130
+ true
2131
+ gap> ForAll(tst{[1 .. 10]}, S -> BruteForceInverseCheck(IsomorphismFpSemigroup(S)));
2132
+ true
2133
+
2134
+ # Test EvaluateExtRepObjWord
2135
+ gap> F := FreeSemigroup(4);;
2136
+ gap> x := EvaluateExtRepObjWord(Generators(F), [1, 4, 2, 5, 3, 1, 2, 1]);
2137
+ s1^4*s2^5*s3*s2
2138
+ gap> ExtRepOfObj(x) = [1, 4, 2, 5, 3, 1, 2, 1];
2139
+ true
2140
+ gap> EvaluateExtRepObjWord(Generators(F), []);
2141
+ Error, the second argument must be a non-empty list
2142
+ gap> F := FreeMonoid(4);;
2143
+ gap> x := EvaluateExtRepObjWord(Generators(F), [1, 4, 2, 5, 3, 1, 2, 1]);
2144
+ m1^4*m2^5*m3*m2
2145
+ gap> ExtRepOfObj(x) = [1, 4, 2, 5, 3, 1, 2, 1];
2146
+ true
2147
+ gap> EvaluateExtRepObjWord(Generators(F), []);
2148
+ <identity ...>
2149
+
2150
+ # TestAssignGeneratorVariables for fp semigroups
2151
+ gap> f := FreeSemigroup("x", "y");;
2152
+ gap> s := f / [[f.1 * f.2, f.2 * f.1]];;
2153
+ gap> AssignGeneratorVariables(s);;
2154
+ gap> x * y = y * x;
2155
+ true
2156
+
2157
+ # TestAssignGeneratorVariables for fp monoids
2158
+ gap> f := FreeMonoid("x", "y");;
2159
+ gap> s := f / [[f.1 * f.2, f.2 * f.1]];;
2160
+ gap> AssignGeneratorVariables(s);;
2161
+ gap> x * y = y * x;
2162
+ true
2163
+
2164
+ # Test ParseRelations
2165
+ gap> f := FreeSemigroup("x", "y", "e");
2166
+ <free semigroup on the generators [ x, y, e ]>
2167
+ gap> ParseRelations(GeneratorsOfSemigroup(f), "ex=x=xe, ey=y=ye, xy = e");
2168
+ [ [ e*x, x ], [ x, x*e ], [ e*y, y ], [ y, y*e ], [ x*y, e ] ]
2169
+ gap> f := FreeSemigroup("x", "y", "a", "b", "X");
2170
+ <free semigroup on the generators [ x, y, a, b, X ]>
2171
+ gap> ParseRelations(GeneratorsOfSemigroup(f), ",x=X^3(yx^2)=a,b(aX)^3x=XXXX");
2172
+ [ [ x, X^3*y*x^2 ], [ X^3*y*x^2, a ], [ b*(a*X)^3*x, X^4 ] ]
2173
+ gap> ParseRelations(GeneratorsOfSemigroup(f), "yx=x= ((a)b^2y)^50");
2174
+ [ [ y*x, x ], [ x, (a*b^2*y)^50 ] ]
2175
+ gap> f := FreeSemigroup("x", "y", "a", "b", "X", "@");;
2176
+ gap> ParseRelations(GeneratorsOfSemigroup(f), "x=y");
2177
+ Error, expected the 1st argument to be a list of a free semigroup or monoid ge\
2178
+ nerators represented by a single alphabet letter but found @
2179
+ gap> f := FreeSemigroup("x", "y");;
2180
+ gap> ParseRelations(GeneratorsOfSemigroup(f), "x=()");
2181
+ Error, expected the 2nd argument to be a string listing the relations of a sem\
2182
+ igroup but found an = symbol which isn't pairing two words
2183
+ gap> ParseRelations(GeneratorsOfSemigroup(f), "x=(");
2184
+ Error, expected the number of open brackets to match the number of closed brac\
2185
+ kets
2186
+ gap> ParseRelations(GeneratorsOfSemigroup(f), "x=(^2)");
2187
+ Error, expected ^ to be preceded by a ) or a generator but found (
2188
+ gap> ParseRelations(GeneratorsOfSemigroup(f), "x=a^");
2189
+ Error, expected ^ to be followed by a positive integer but found end of string
2190
+ gap> ParseRelations(GeneratorsOfSemigroup(f), "x=x^y");
2191
+ Error, expected ^ to be followed by a positive integer but found y
2192
+ gap> ParseRelations(GeneratorsOfSemigroup(f), "x=^y");
2193
+ Error, expected ^ to be preceded by a ) or a generator but found beginning of \
2194
+ string
2195
+ gap> ParseRelations(GeneratorsOfSemigroup(f), "x=a");
2196
+ Error, expected a free semigroup generator but found a
2197
+ gap> ParseRelations(GeneratorsOfSemigroup(f), "x=y^0");
2198
+ Error, expected ^ to be followed by a positive integer but found 0
2199
+ gap> ParseRelations(GeneratorsOfSemigroup(f), "x=");
2200
+ Error, expected the 2nd argument to be a string listing the relations of a sem\
2201
+ igroup but found an = symbol which isn't pairing two words
2202
+
2203
+ #
2204
+ gap> f := FreeMonoid("x", "y", "a", "b", "X");
2205
+ <free monoid on the generators [ x, y, a, b, X ]>
2206
+ gap> ParseRelations(GeneratorsOfMonoid(f),
2207
+ > "x=X^3(yx^2)=a,b(aX)^3x=XXXX,XXX=1");
2208
+ [ [ x, X^3*y*x^2 ], [ X^3*y*x^2, a ], [ b*(a*X)^3*x, X^4 ],
2209
+ [ X^3, <identity ...> ] ]
2210
+ gap> f := FreeMonoid("x", "y", "e");
2211
+ <free monoid on the generators [ x, y, e ]>
2212
+ gap> ParseRelations(GeneratorsOfMonoid(f), "ex=x=xe=1, ey=y=ye, xy = e, 1 = 1");
2213
+ [ [ e*x, x ], [ x, x*e ], [ x*e, <identity ...> ], [ e*y, y ], [ y, y*e ],
2214
+ [ x*y, e ], [ <identity ...>, <identity ...> ] ]
2215
+ gap> f := FreeMonoid("x", "y", "a", "b", "X");
2216
+ <free monoid on the generators [ x, y, a, b, X ]>
2217
+ gap> ParseRelations(GeneratorsOfMonoid(f), ",x=X^3(yx^2)=a,b(aX)^3x=XXXX=1^1=1");
2218
+ [ [ x, X^3*y*x^2 ], [ X^3*y*x^2, a ], [ b*(a*X)^3*x, X^4 ],
2219
+ [ X^4, <identity ...> ], [ <identity ...>, <identity ...> ] ]
2220
+ gap> ParseRelations(GeneratorsOfMonoid(f), "1=yx=x= ((a)b^2y)^50=1");
2221
+ [ [ <identity ...>, y*x ], [ y*x, x ], [ x, (a*b^2*y)^50 ],
2222
+ [ (a*b^2*y)^50, <identity ...> ] ]
2223
+ gap> f := FreeMonoid("x", "y", "a", "b", "X", "@");;
2224
+ gap> ParseRelations(GeneratorsOfMonoid(f), "1=x^1=y");
2225
+ Error, expected the 1st argument to be a list of a free semigroup or monoid ge\
2226
+ nerators represented by a single alphabet letter but found @
2227
+ gap> f := FreeMonoid("x", "y");;
2228
+ gap> ParseRelations(GeneratorsOfMonoid(f), "1=()");
2229
+ Error, expected the 2nd argument to be a string listing the relations of a sem\
2230
+ igroup but found an = symbol which isn't pairing two words
2231
+ gap> ParseRelations(GeneratorsOfMonoid(f), "1=(");
2232
+ Error, expected the number of open brackets to match the number of closed brac\
2233
+ kets
2234
+ gap> ParseRelations(GeneratorsOfMonoid(f), "x=(^1)");
2235
+ Error, expected ^ to be preceded by a ) or a generator but found (
2236
+ gap> ParseRelations(GeneratorsOfMonoid(f), "1=a^");
2237
+ Error, expected ^ to be followed by a positive integer but found end of string
2238
+ gap> ParseRelations(GeneratorsOfMonoid(f), "1=x^y");
2239
+ Error, expected ^ to be followed by a positive integer but found y
2240
+ gap> ParseRelations(GeneratorsOfMonoid(f), "1=^y");
2241
+ Error, expected ^ to be preceded by a ) or a generator but found beginning of \
2242
+ string
2243
+ gap> ParseRelations(GeneratorsOfMonoid(f), "1=x=a");
2244
+ Error, expected a free semigroup generator but found a
2245
+ gap> ParseRelations(GeneratorsOfMonoid(f), "1=x=y^0");
2246
+ Error, expected ^ to be followed by a positive integer but found 0
2247
+ gap> ParseRelations(GeneratorsOfMonoid(f), "1=");
2248
+ Error, expected the 2nd argument to be a string listing the relations of a sem\
2249
+ igroup but found an = symbol which isn't pairing two words
2250
+
2251
+ # Test ElementOfFpSemigroup
2252
+ gap> f := FreeSemigroup("x", "y");;
2253
+ gap> x := f.1;;
2254
+ gap> y := f.2;;
2255
+ gap> s := f / [[x * y, y * x]];
2256
+ <fp semigroup with 2 generators and 1 relation of length 6>
2257
+ gap> a := ElementOfFpSemigroup(s, x * y);
2258
+ x*y
2259
+ gap> b := ElementOfFpSemigroup(s, y * x);
2260
+ y*x
2261
+ gap> x * y = y * x;
2262
+ false
2263
+ gap> a = b;
2264
+ true
2265
+
2266
+ # Test ElementOfFpMonoid
2267
+ gap> f := FreeMonoid("x", "y");;
2268
+ gap> x := f.1;;
2269
+ gap> y := f.2;;
2270
+ gap> s := f / [[x * y, y * x]];
2271
+ <fp monoid with 2 generators and 1 relation of length 6>
2272
+ gap> a := ElementOfFpMonoid(s, x * y);
2273
+ x*y
2274
+ gap> b := ElementOfFpMonoid(s, y * x);
2275
+ y*x
2276
+ gap> x * y = y * x;
2277
+ false
2278
+ gap> a = b;
2279
+ true
2280
+
2281
+ # NiceMonomorphism
2282
+ gap> S := Monoid(Transformation([1, 3, 4, 1, 3]),
2283
+ > Transformation([2, 4, 1, 5, 5]),
2284
+ > Transformation([2, 5, 3, 5, 3]),
2285
+ > Transformation([4, 1, 2, 2, 1]),
2286
+ > Transformation([5, 5, 1, 1, 3]));;
2287
+ gap> map := IsomorphismFpSemigroup(S);
2288
+ <transformation monoid of degree 5 with 5 generators> ->
2289
+ <fp semigroup with 6 generators and 619 relations of length 4987>
2290
+ gap> T := Range(map);
2291
+ <fp semigroup with 6 generators and 619 relations of length 4987>
2292
+ gap> AsList(T);
2293
+ [ s1, s2, s3, s4, s5, s6, s2^2, s2*s3, s2*s4, s2*s5, s2*s6, s3*s2, s3^2,
2294
+ s3*s4, s3*s5, s3*s6, s4*s2, s4*s3, s4^2, s4*s5, s4*s6, s5*s2, s5*s3, s5*s4,
2295
+ s5^2, s5*s6, s6*s2, s6*s3, s6*s4, s6*s5, s6^2, s2^3, s2^2*s3, s2^2*s5,
2296
+ s2^2*s6, s2*s3*s2, s2*s3^2, s2*s3*s4, s2*s3*s6, s2*s4*s2, s2*s4*s3,
2297
+ s2*s4^2, s2*s4*s5, s2*s4*s6, s2*s5*s2, s2*s5*s3, s2*s5*s4, s2*s5^2,
2298
+ s2*s5*s6, s2*s6*s2, s2*s6*s3, s2*s6*s4, s2*s6*s5, s2*s6^2, s3*s2^2,
2299
+ s3*s2*s3, s3*s2*s4, s3*s2*s5, s3*s2*s6, s3^2*s2, s3^3, s3^2*s4, s3^2*s5,
2300
+ s3^2*s6, s3*s4*s2, s3*s4*s3, s3*s4^2, s3*s4*s5, s3*s4*s6, s3*s5*s2,
2301
+ s3*s5*s3, s3*s5*s4, s3*s5^2, s3*s5*s6, s3*s6*s2, s3*s6*s3, s3*s6*s4,
2302
+ s3*s6*s5, s3*s6^2, s4*s2^2, s4*s2*s3, s4*s2*s4, s4*s2*s5, s4*s3*s2,
2303
+ s4*s3^2, s4*s3*s4, s4*s3*s5, s4*s3*s6, s4^2*s2, s4^2*s3, s4^3, s4^2*s5,
2304
+ s4^2*s6, s4*s5*s2, s4*s5*s3, s4*s5*s4, s4*s6*s2, s4*s6*s3, s4*s6*s4,
2305
+ s4*s6*s5, s4*s6^2, s5*s2^2, s5*s2*s3, s5*s2*s4, s5*s2*s5, s5*s2*s6,
2306
+ s5*s3*s2, s5*s3^2, s5*s3*s4, s5*s3*s5, s5*s3*s6, s5*s4^2, s5^2*s3, s5^2*s4,
2307
+ s5^3, s5*s6*s3, s5*s6*s4, s5*s6*s5, s6*s2^2, s6*s2*s3, s6*s2*s4, s6*s2*s5,
2308
+ s6*s2*s6, s6*s3*s2, s6*s3^2, s6*s3*s4, s6*s3*s5, s6*s3*s6, s6*s4*s2,
2309
+ s6*s4^2, s6*s5*s2, s6*s5*s3, s6*s5*s4, s6*s5^2, s6^2*s2, s6^2*s3, s6^2*s4,
2310
+ s6^2*s5, s6^3, s2^3*s5, s2^2*s3^2, s2^2*s3*s4, s2^2*s5*s2, s2^2*s5^2,
2311
+ s2^2*s5*s6, s2^2*s6*s4, s2*s3*s2^2, s2*s3*s2*s5, s2*s3^2*s6, s2*s3*s4*s2,
2312
+ s2*s3*s4*s3, s2*s3*s4*s5, s2*s3*s4*s6, s2*s3*s6^2, s2*s4*s3*s2,
2313
+ s2*s4*s3*s5, s2*s4^2*s2, s2*s4^2*s5, s2*s4*s6*s2, s2*s4*s6*s3, s2*s4*s6*s5,
2314
+ s2*s5*s2*s4, s2*s5*s6*s3, s2*s5*s6*s5, s2*s6*s2*s5, s2*s6*s4*s2,
2315
+ s3*s2^2*s3, (s3*s2)^2, s3*s2*s4*s2, s3*s2*s4*s3, s3*s2*s4^2, s3*s2*s4*s5,
2316
+ s3*s2*s5*s3, s3*s2*s5*s6, s3*s2*s6*s4, s3*s2*s6^2, s3^2*s2^2, s3^2*s2*s5,
2317
+ s3^2*s4*s2, s3^2*s4*s3, s3^2*s4*s5, s3^2*s4*s6, s3^2*s5*s4, s3^2*s6*s2,
2318
+ s3^2*s6*s3, s3^2*s6*s5, s3^2*s6^2, s3*s4*s2^2, s3*s4*s2*s3, s3*s4*s2*s4,
2319
+ s3*s4*s3*s2, s3*s4*s3^2, (s3*s4)^2, s3*s4*s3*s5, s3*s4*s3*s6, s3*s4^2*s2,
2320
+ s3*s4^2*s3, s3*s4^2*s5, s3*s4*s5*s2, s3*s4*s5*s3, s3*s4*s5*s4, s3*s4*s6*s2,
2321
+ s3*s4*s6*s3, s3*s4*s6*s4, s3*s4*s6*s5, s3*s4*s6^2, s3*s5*s2^2, s3*s5*s2*s3,
2322
+ s3*s5*s2*s4, s3*s5*s2*s5, s3*s5*s2*s6, s3*s5*s3*s2, (s3*s5)^2, s3*s5*s3*s6,
2323
+ s3*s5^2*s3, s3*s5^2*s4, s3*s5^3, s3*s5*s6*s3, s3*s5*s6*s4, s3*s5*s6*s5,
2324
+ s3*s6*s2^2, s3*s6*s2*s3, s3*s6*s2*s4, s3*s6*s2*s5, s3*s6*s2*s6,
2325
+ s3*s6*s3*s2, s3*s6*s3^2, s3*s6*s3*s4, s3*s6*s3*s5, (s3*s6)^2, s3*s6*s4*s2,
2326
+ s3*s6*s4^2, s3*s6*s5*s3, s3*s6*s5*s4, s3*s6*s5^2, s3*s6^2*s2, s3*s6^2*s3,
2327
+ s3*s6^2*s5, s3*s6^3, s4*s2*s3*s4, s4*s2*s3*s6, (s4*s2)^2, s4*s2*s4*s5,
2328
+ s4*s3*s2^2, s4*s3*s2*s3, s4*s3*s2*s4, s4*s3*s2*s5, s4*s3*s2*s6, s4*s3^3,
2329
+ s4*s3*s4*s2, (s4*s3)^2, s4*s3*s4*s5, s4*s3*s5*s3, s4*s3*s5*s4, s4*s3*s5^2,
2330
+ s4*s3*s5*s6, s4*s3*s6*s2, s4*s3*s6*s3, s4*s3*s6*s5, s4*s3*s6^2, s4^2*s3*s4,
2331
+ s4^2*s5*s3, s4*s5*s2^2, s4*s5*s2*s5, s4*s5*s3*s2, s4*s5*s3^2, s4*s6*s2*s3,
2332
+ s4*s6*s2*s4, s4*s6*s3*s2, s4*s6*s3^2, s4*s6*s3*s4, s4*s6*s5*s3, s4*s6*s5^2,
2333
+ s4*s6^2*s2, s4*s6^2*s3, s4*s6^2*s4, s4*s6^2*s5, s4*s6^3, s5*s2^2*s3,
2334
+ s5*s2*s4*s2, s5*s2*s4*s3, s5*s2*s4^2, s5*s2*s5*s3, s5*s3*s4*s2,
2335
+ s5*s3*s6*s2, s5*s3*s6*s3, s5*s3*s6*s5, s5*s3*s6^2, s5*s4^2*s2, s5^3*s3,
2336
+ s5*s6*s3^2, s6*s2^2*s3, s6*s2^2*s5, s6*s2^2*s6, s6*s2*s3*s2, s6*s2*s3^2,
2337
+ s6*s2*s3*s4, s6*s2*s3*s6, s6*s2*s4*s2, s6*s2*s4*s3, s6*s2*s4*s5,
2338
+ s6*s2*s4*s6, s6*s2*s5*s3, s6*s3*s2^2, s6*s3*s2*s3, s6*s3*s2*s5,
2339
+ s6*s3*s2*s6, s6*s3^3, s6*s3^2*s6, s6*s3*s4*s3, s6*s3*s4^2, s6*s3*s5*s3,
2340
+ s6*s3*s5^2, s6*s3*s5*s6, s6*s5*s2*s3, s6*s5*s2*s4, s6*s5*s3^2, s6*s5*s3*s6,
2341
+ s6*s5*s4^2, s6*s5^2*s4, s6^2*s2*s3, s6^2*s2*s4, s6^2*s3*s4, s6^2*s4*s2,
2342
+ s6^2*s5*s3, s6^3*s2, s6^3*s3, s6^3*s4, s2^2*s5*s2*s4, s2*s3^2*s6*s3,
2343
+ s2*s3^2*s6*s5, s2*s3^2*s6^2, s2*s3*s4*s2^2, s2*(s3*s4)^2, s2*s3*s4*s3*s5,
2344
+ s2*s3*s4*s3*s6, s2*s3*s4*s5*s3, s2*s3*s4*s5*s4, s2*s3*s4*s6*s2,
2345
+ s2*s3*s4*s6*s3, s2*s3*s4*s6*s5, s2*s3*s4*s6^2, s2*s4*s3*s2*s4,
2346
+ s2*s4*s3*s2*s5, s2*s4*s3*s5*s3, s2*s4*s6*s2*s3, s2*s4*s6*s2*s4,
2347
+ s2*s4*s6*s3^2, s2*s4*s6*s5*s3, s2*s4*s6*s5^2, s2*s5*s6*s3^2, s3*s2^2*s3^2,
2348
+ (s3*s2)^2*s5, s3*s2*s6*s4*s2, s3^2*s2*s5*s3, s3^2*s4*s2*s3, s3^2*s4*s3^2,
2349
+ s3*(s3*s4)^2, s3^2*s4*s3*s5, s3^2*s4*s5*s2, s3^2*s4*s5*s3, s3^2*s6*s2*s3,
2350
+ s3^2*s6*s2*s4, s3^2*s6*s3^2, s3^2*s6*s3*s4, s3^2*s6*s5*s3, s3^2*s6*s5^2,
2351
+ s3^2*s6^2*s2, s3^2*s6^2*s3, s3^2*s6^2*s5, s3^2*s6^3, s3*s4*s2*s3*s4,
2352
+ s3*s4*s2*s3*s6, s3*(s4*s2)^2, s3*s4*s2*s4*s5, s3*s4*s3*s2*s3,
2353
+ s3*s4*s3*s2*s4, s3*s4*s3^3, (s3*s4)^2*s3, s3*s4*s3*s5*s3, s3*s4*s3*s5^2,
2354
+ s3*s4*s3*s5*s6, s3*s4*s3*s6*s2, s3*s4*s3*s6*s3, s3*s4*s3*s6*s5,
2355
+ s3*s4*s3*s6^2, s3*s4*s5*s2*s5, s3*s4*s5*s3^2, s3*s4*s6*s2*s3,
2356
+ s3*s4*s6*s2*s4, s3*s4*s6*s3^2, s3*s4*s6*s3*s4, s3*s4*s6*s5*s3,
2357
+ s3*s4*s6*s5^2, s3*s4*s6^2*s2, s3*s4*s6^2*s3, s3*s4*s6^2*s5, s3*s4*s6^3,
2358
+ s3*s5*s2^2*s3, s3*s5*s2*s4*s2, s3*s5*s2*s4*s3, s3*s5*s2*s4^2,
2359
+ s3*s5*s2*s5*s3, s3*s5*s3*s6*s2, s3*s5*s3*s6*s3, s3*s5*s3*s6*s5,
2360
+ s3*s5*s3*s6^2, s3*s5^3*s3, s3*s6*s2*s3^2, s3*s6*s2*s3*s4, s3*s6*s2*s4*s2,
2361
+ s3*s6*s2*s4*s3, s3*s6*s2*s4*s5, s3*s6*s2*s4*s6, s3*s6*s2*s5*s3,
2362
+ s3*s6*s3^2*s6, s3*s6*s3*s4*s3, s3*s6*s5*s3^2, s3*s6*s5*s3*s6,
2363
+ s3*s6^2*s2*s3, s3*s6^2*s2*s4, s3*s6^2*s3*s4, s3*s6^2*s5*s3, s3*s6^3*s2,
2364
+ s3*s6^3*s3, s3*s6^3*s4, s4*s3*s2^2*s3, s4*s3*s2*s4*s3, s4*s3*s2*s4^2,
2365
+ s4*s3*s2*s5*s3, s4*s3*s2*s5*s6, s4*s3*s2*s6^2, (s4*s3)^2*s6,
2366
+ s4*s3*s4*s5*s3, s4*s3*s5^2*s3, s4*s3*s6*s2*s3, s4*s3*s6*s3*s4,
2367
+ s4*s3*s6*s5*s3, s4*s3*s6^2*s2, s4*s3*s6^2*s3, s4*s6*s2*s3*s4,
2368
+ s4*s6*s2*s4*s3, s4*s6*s3*s4*s3, s4*s6^2*s4*s2, s4*s6^2*s5*s3, s4*s6^3*s2,
2369
+ s5*s3*s6*s2*s3, s5*s3*s6*s2*s4, s5*s3*s6*s3^2, s5*s3*s6*s3*s4,
2370
+ s5*s3*s6*s5*s3, s5*s3*s6*s5^2, s5*s3*s6^2*s2, s5*s3*s6^2*s3, s5*s3*s6^2*s5,
2371
+ s5*s3*s6^3, s6*s2^2*s3^2, s6*s2^2*s5*s6, s6*s2*s3*s2^2, s6*s2*s3*s2*s5,
2372
+ s6*s2*s3*s4*s2, s6*s2*s3*s4*s3, s6*s2*s4*s6*s2, s6*s2*s4*s6*s3,
2373
+ s6*s2*s4*s6*s5, s6*s3*s2*s5*s3, s6*s3^2*s6*s2, s6*s3^2*s6*s5,
2374
+ s6*s5*s3*s6*s2, s6*s5*s3*s6*s5, s6*s5*s4^2*s2, s6^2*s2*s3^2, s6^2*s2*s4*s3,
2375
+ s6^2*s3*s4*s3, s6^3*s3*s4, s2*s3^2*s6*s3*s4, s2*s3^2*s6*s5*s3,
2376
+ s2*s3^2*s6^2*s2, s2*s3^2*s6^2*s3, s2*(s3*s4)^2*s3, s2*s3*s4*s3*s5*s3,
2377
+ s2*s3*s4*s3*s6*s2, s2*s3*s4*s5*s3^2, s2*s3*s4*s6^2*s2, s2*s4*s6*s2*s3*s4,
2378
+ s2*s4*s6*s2*s4*s3, s3^2*s4*s3^3, s3^2*s4*s3*s5^2, s3^2*s6*s2*s3*s4,
2379
+ s3^2*s6*s2*s4*s3, s3^2*s6*s2*s4*s6, (s3^2*s6)^2, s3^2*s6*s3*s4*s3,
2380
+ s3^2*s6*s5*s3*s6, s3^2*s6^2*s2*s3, s3^2*s6^2*s2*s4, s3^2*s6^2*s3*s4,
2381
+ s3^2*s6^2*s5*s3, s3^2*s6^3*s2, s3^2*s6^3*s3, (s3*s4)^2*s3*s6,
2382
+ s3*s4*s3*s5^2*s3, s3*s4*s3*s6*s2*s3, s3*s4*s3*s6*s3*s4, s3*s4*s3*s6*s5*s3,
2383
+ s3*s4*s3*s6^2*s2, s3*s4*s3*s6^2*s3, s3*s4*s6*s2*s3*s4, s3*s4*s6*s2*s4*s3,
2384
+ s3*s4*s6*s3*s4*s3, s3*s4*s6^2*s5*s3, s3*s4*s6^3*s2, s3*s5*s3*s6*s2*s3,
2385
+ s3*s5*s3*s6*s2*s4, s3*s5*s3*s6*s3^2, s3*s5*s3*s6*s3*s4, s3*s5*s3*s6*s5*s3,
2386
+ s3*s5*s3*s6*s5^2, s3*s5*s3*s6^2*s2, s3*s5*s3*s6^2*s3, s3*s5*s3*s6^2*s5,
2387
+ s3*s5*s3*s6^3, s3*s6*s2*s3*s4*s3, s3*s6*s2*s4*s6*s2, s3*s6*s2*s4*s6*s3,
2388
+ s3*s6*s2*s4*s6*s5, s3*s6*s3^2*s6*s2, s3*s6*s3^2*s6*s5, s3*s6*s5*s3*s6*s2,
2389
+ (s3*s6*s5)^2, s3*s6^2*s2*s3^2, s3*s6^2*s2*s4*s3, s3*s6^2*s3*s4*s3,
2390
+ s3*s6^3*s3*s4, s4*s3*s2^2*s3^2, (s4*s3)^2*s6*s2, s4*s3*s6*s3*s4*s3,
2391
+ s4*s6*s2*s3*s4*s3, s5*s3*s6*s2*s3*s4, s5*s3*s6*s2*s4*s3, s5*s3*s6*s2*s4*s6,
2392
+ s5*s3*s6*s3^2*s6, s5*s3*s6*s3*s4*s3, (s5*s3*s6)^2, s5*s3*s6^2*s2*s3,
2393
+ s5*s3*s6^2*s2*s4, s5*s3*s6^2*s3*s4, s5*s3*s6^2*s5*s3, s5*s3*s6^3*s2,
2394
+ s5*s3*s6^3*s3, s6*s2*s4*s6*s3^2, s6^3*s3*s4*s3, s2*s3^2*s6*s3*s4*s3,
2395
+ s2*s4*s6*s2*s3*s4*s3, s3^2*s6*s2*s3*s4*s3, s3^2*s6*s2*s4*s6*s2,
2396
+ s3^2*s6*s2*s4*s6*s3, s3^2*s6*s2*s4*s6*s5, (s3^2*s6)^2*s2, (s3^2*s6)^2*s5,
2397
+ s3^2*s6*s5*s3*s6*s2, s3*(s3*s6*s5)^2, s3^2*s6^2*s2*s3^2, s3^2*s6^2*s2*s4*s3,
2398
+ s3^2*s6^2*s3*s4*s3, s3^2*s6^3*s3*s4, (s3*s4)^2*s3*s6*s2,
2399
+ s3*s4*s3*s6*s3*s4*s3, s3*s4*s6*s2*s3*s4*s3, s3*s5*s3*s6*s2*s3*s4,
2400
+ s3*s5*s3*s6*s2*s4*s3, s3*s5*s3*s6*s2*s4*s6, s3*s5*s3*s6*s3^2*s6,
2401
+ s3*s5*s3*s6*s3*s4*s3, s3*(s5*s3*s6)^2, s3*s5*s3*s6^2*s2*s3,
2402
+ s3*s5*s3*s6^2*s2*s4, s3*s5*s3*s6^2*s3*s4, s3*s5*s3*s6^2*s5*s3,
2403
+ s3*s5*s3*s6^3*s2, s3*s5*s3*s6^3*s3, s3*s6*s2*s4*s6*s3^2, s3*s6^3*s3*s4*s3,
2404
+ s5*s3*s6*s2*s3*s4*s3, s5*s3*s6*s2*s4*s6*s2, s5*s3*s6*s2*s4*s6*s3,
2405
+ s5*s3*s6*s3^2*s6*s2, (s5*s3*s6)^2*s2, s5*s3*s6^2*s2*s4*s3,
2406
+ s5*s3*s6^2*s3*s4*s3, s5*s3*s6^3*s3*s4, s3^2*s6*s2*s4*s6*s3^2,
2407
+ s3^2*s6^3*s3*s4*s3, s3*s5*s3*s6*s2*s3*s4*s3, s3*s5*s3*s6*s2*s4*s6*s2,
2408
+ s3*s5*s3*s6*s2*s4*s6*s3, s3*s5*s3*s6*s3^2*s6*s2, s3*(s5*s3*s6)^2*s2,
2409
+ s3*s5*s3*s6^2*s2*s4*s3, s3*s5*s3*s6^2*s3*s4*s3, s3*s5*s3*s6^3*s3*s4,
2410
+ s5*s3*s6^3*s3*s4*s3, s3*s5*s3*s6^3*s3*s4*s3 ]
2411
+ gap> S := Monoid(Transformation([1, 3, 4, 1, 3]),
2412
+ > Transformation([4, 1, 2, 2, 1]),
2413
+ > Transformation([5, 5, 1, 1, 3]));;
2414
+ gap> map := IsomorphismFpSemigroup(S);
2415
+ <transformation monoid of degree 5 with 3 generators> ->
2416
+ <fp semigroup with 4 generators and 68 relations of length 491>
2417
+ gap> T := Range(map);
2418
+ <fp semigroup with 4 generators and 68 relations of length 491>
2419
+ gap> TestEnumerator(Enumerator(T));
2420
+ true
2421
+ gap> AsSSortedList(T);
2422
+ [ s1, s2, s3, s4, s2^2, s2*s3, s2*s4, s3*s2, s3^2, s3*s4, s4*s2, s4*s3, s4^2,
2423
+ s2^3, s2^2*s3, s2^2*s4, s2*s3*s2, s2*s3^2, s2*s3*s4, s2*s4*s2, s2*s4*s3,
2424
+ s2*s4^2, s3*s2^2, s3*s2*s3, s3*s2*s4, s3^2*s2, s3^3, s3*s4*s2, s3*s4*s3,
2425
+ s3*s4^2, s4*s2^2, s4*s2*s3, s4*s2*s4, s4*s3*s2, s4*s3^2, s4^2*s2, s4^2*s3,
2426
+ s4^3, s2^3*s3, s2^3*s4, s2^2*s3*s2, s2^2*s3^2, s2^2*s3*s4, s2^2*s4*s2,
2427
+ s2^2*s4^2, s2*s3*s4*s3, s2*s3*s4^2, s2*s4*s2*s3, s2*s4^2*s2, s3*s2*s3^2,
2428
+ s3*s2*s4*s2, s3*s2*s4^2, s3^2*s2*s3, s3*s4*s2^2, s3*s4*s2*s3, s3*s4*s2*s4,
2429
+ s3*s4^2*s2, s3*s4^2*s3, s4*s2^2*s3, s4*s2^2*s4, s4*s2*s3^2, s4*s2*s4*s3,
2430
+ s4*s2*s4^2, s4*s3*s2^2, s4*s3*s2*s3, s4*s3*s2*s4, s4^2*s2*s3, s4^2*s2*s4,
2431
+ s4^2*s3*s2, s4^3*s2, s2^3*s3^2, s2^3*s4*s2, s2^2*s3*s4*s3, s2^2*s3*s4^2,
2432
+ s2^2*s4*s2*s3, s2^2*s4^2*s2, s2*s3*s4^2*s2, s2*s3*s4^2*s3, s3*s2*s4^2*s2,
2433
+ s3*s4*s2*s3^2, s3*s4*s2*s4^2, s4*s2^2*s3^2, s4*s2^2*s3*s4, s4*s2^2*s4*s2,
2434
+ s4*s2^2*s4^2, s4*s2*s4^2*s2, s4*s3*s2*s3^2, s4*s3*s2*s4*s2, s4*s3*s2*s4^2,
2435
+ s4^2*s2*s3^2, s4^2*s2*s4*s3, s4^2*s2*s4^2, s4^3*s2*s3, s2^2*s3*s4^2*s2,
2436
+ s2^2*s3*s4^2*s3, s3*s4*s2*s4^2*s2, s4*s2^2*s3*s4*s3, s4*s2^2*s3*s4^2,
2437
+ s4*s2^2*s4^2*s2, s4*s3*s2*s4^2*s2, (s4^2*s2)^2, s4^3*s2*s3^2,
2438
+ s4*s2^2*s3*s4^2*s2 ]
2439
+
2440
+ # \<
2441
+ gap> T.1 < T.2 * T.3;
2442
+ true
2443
+ gap> F := FreeSemigroup(2);; AssignGeneratorVariables(F);;
2444
+ gap> rels := [[s1 ^ 2, s1], [s1 * s2, s2], [s2 ^ 2, s2 * s1]];;
2445
+ gap> S := F / rels;
2446
+ <fp semigroup with 2 generators and 3 relations of length 12>
2447
+ gap> S.1 < S.2 * S.1;
2448
+ true
2449
+ gap> F := FreeMonoid(2);; AssignGeneratorVariables(F);;
2450
+ gap> rels := [[m1 ^ 2, m1], [m2 ^ 2, m2], [m1 * m2 * m1, m1 * m2],
2451
+ > [m2 * m1 * m2, m1 * m2]];;
2452
+ gap> S := F / rels;
2453
+ <fp monoid with 2 generators and 4 relations of length 18>
2454
+ gap> S.1 < S.2 * S.1;
2455
+ true
2456
+
2457
+ # IsomorphismFpSemigroup
2458
+ gap> F := FreeGroup(1);
2459
+ <free group on the generators [ f1 ]>
2460
+ gap> R := [F.1 ^ 2];;
2461
+ gap> IsomorphismFpSemigroup(F / R);
2462
+ <fp group on the generators [ f1 ]> ->
2463
+ <fp semigroup with 3 generators and 8 relations of length 27>
2464
+ gap> IsomorphismFpMonoid(F / R);
2465
+ <fp group on the generators [ f1 ]> ->
2466
+ <fp monoid with 2 generators and 3 relations of length 8>
2467
+
2468
+ # String for IsElementOfFpMonoid
2469
+ gap> String(One(FreeMonoid(0)));
2470
+ "<identity ...>"
2471
+
2472
+ # String + Print for FreeMonoid/Semigroup
2473
+ gap> String(FreeMonoid("a", "b"));
2474
+ "FreeMonoidAndAssignGeneratorVars([ \"a\", \"b\" ])"
2475
+ gap> Print(FreeMonoid("a", "b"), "\n");
2476
+ FreeMonoidAndAssignGeneratorVars([ "a", "b" ])
2477
+ gap> String(FreeSemigroup("a", "b"));
2478
+ "FreeSemigroupAndAssignGeneratorVars([ \"a\", \"b\" ])"
2479
+ gap> Print(FreeSemigroup("a", "b"), "\n");
2480
+ FreeSemigroupAndAssignGeneratorVars([ "a", "b" ])
2481
+
2482
+ # String + Print for FpMonoid/Semigroup
2483
+ gap> S := RightZeroSemigroup(2);
2484
+ <transformation semigroup of degree 2 with 2 generators>
2485
+ gap> S := Range(IsomorphismFpSemigroup(S));
2486
+ <fp semigroup with 2 generators and 4 relations of length 14>
2487
+ gap> String(S);
2488
+ "FreeSemigroupAndAssignGeneratorVars([ \"s1\", \"s2\" ])\> / \<\>[ [ s1^2, s1 \
2489
+ ], [ s1*s2, s2 ], [ s2*s1, s1 ], [ s2^2, s2 ] ]\<"
2490
+ gap> Print(S, "\n");
2491
+ FreeSemigroupAndAssignGeneratorVars([ "s1", "s2" ]) /
2492
+ [ [ s1^2, s1 ], [ s1*s2, s2 ], [ s2*s1, s1 ], [ s2^2, s2 ] ]
2493
+ gap> FreeSemigroupAndAssignGeneratorVars(["s1", "s2"]) /
2494
+ > [[s1 ^ 2, s1], [s1 * s2, s2], [s2 * s1, s1], [s2 ^ 2, s2]];
2495
+ <fp semigroup with 2 generators and 4 relations of length 14>
2496
+ gap> S := Semigroup(RightZeroSemigroup(2), IdentityTransformation);
2497
+ <transformation monoid of degree 2 with 2 generators>
2498
+ gap> S := Range(IsomorphismFpMonoid(S));
2499
+ <fp monoid with 2 generators and 4 relations of length 14>
2500
+ gap> String(S);
2501
+ "FreeMonoidAndAssignGeneratorVars([ \"m1\", \"m2\" ])\> / \<\>[ [ m1^2, m1 ], \
2502
+ [ m1*m2, m2 ], [ m2*m1, m1 ], [ m2^2, m2 ] ]\<"
2503
+ gap> Print(S, "\n");
2504
+ FreeMonoidAndAssignGeneratorVars([ "m1", "m2" ]) /
2505
+ [ [ m1^2, m1 ], [ m1*m2, m2 ], [ m2*m1, m1 ], [ m2^2, m2 ] ]
2506
+ gap> FreeMonoidAndAssignGeneratorVars(["m1", "m2"]) /
2507
+ > [[m1 ^ 2, m1], [m1 * m2, m2], [m2 * m1, m1], [m2 ^ 2, m2]];
2508
+ <fp monoid with 2 generators and 4 relations of length 14>
2509
+ gap> Print(AsMonoid(IsFpMonoid, SymmetricInverseMonoid(2)), "\n");
2510
+ FreeMonoidAndAssignGeneratorVars([ "m1", "m2" ]) /
2511
+ [ [ m1^2, One(m1) ], [ m2^2, m2 ], [ (m1*m2)^2, m2*m1*m2 ], [ (m2*m1)^2, m2*m1\
2512
+ *m2 ] ]
2513
+ gap> FreeMonoidAndAssignGeneratorVars(["m1", "m2"]) /
2514
+ > [[m1 ^ 2, One(m1)], [m2 ^ 2, m2], [(m1 * m2) ^ 2, m2 * m1 * m2],
2515
+ > [(m2 * m1) ^ 2, m2 * m1 * m2]];
2516
+ <fp monoid with 2 generators and 4 relations of length 21>
2517
+
2518
+ # IsomorphismFpSemigroup for a free semigroup/monoid
2519
+ gap> IsomorphismFpSemigroup(FreeSemigroup(2));
2520
+ <free semigroup on the generators [ s1, s2 ]> ->
2521
+ <fp semigroup with 2 generators and 0 relations of length 2>
2522
+ gap> IsomorphismFpMonoid(FreeMonoid(2));
2523
+ <free monoid on the generators [ m1, m2 ]> ->
2524
+ <fp monoid with 2 generators and 0 relations of length 2>
2525
+ gap> IsomorphismFpSemigroup(FreeMonoid(2));
2526
+ CompositionMapping( <fp monoid with 2 generators and 0 relations of length 2>
2527
+ -> <fp semigroup with 3 generators and 5 relations of length 18>,
2528
+ <free monoid on the generators [ m1, m2 ]> ->
2529
+ <fp monoid with 2 generators and 0 relations of length 2> )
2530
+
2531
+ # Factorization for an fp monoid
2532
+ gap> F := FreeMonoid(2);
2533
+ <free monoid on the generators [ m1, m2 ]>
2534
+ gap> F := Range(IsomorphismFpMonoid(F));
2535
+ <fp monoid with 2 generators and 0 relations of length 2>
2536
+ gap> w := Factorization(F, F.1 * F.2 * One(F));
2537
+ [ 2, 3 ]
2538
+ gap> EvaluateWord(GeneratorsOfSemigroup(F), w) = F.1 * F.2 * One(F);
2539
+ true
2540
+ gap> w := Factorization(F, One(F));
2541
+ [ 1 ]
2542
+ gap> EvaluateWord(GeneratorsOfSemigroup(F), w) = One(F);
2543
+ true
2544
+
2545
+ # Reversed for elements of a fp semigroup/monoid
2546
+ gap> F := FreeSemigroup("a", "b");
2547
+ <free semigroup on the generators [ a, b ]>
2548
+ gap> AssignGeneratorVariables(F);
2549
+ gap> R := [[a ^ 3, a], [b ^ 2, b], [(a * b) ^ 2, a]];
2550
+ [ [ a^3, a ], [ b^2, b ], [ (a*b)^2, a ] ]
2551
+ gap> S := F / R;
2552
+ <fp semigroup with 2 generators and 3 relations of length 14>
2553
+ gap> Reversed(a * b * b);
2554
+ b^2*a
2555
+ gap> Reversed(a * b * b * a);
2556
+ a*b^2*a
2557
+ gap> Reversed(a * b * b) = b * b * a;
2558
+ true
2559
+ gap> Reversed(a * b * b * a) = a * b * b * a;
2560
+ true
2561
+ gap> F := FreeMonoid("a", "b");
2562
+ <free monoid on the generators [ a, b ]>
2563
+ gap> AssignGeneratorVariables(F);
2564
+ gap> R := ParseRelations([a, b], "a ^ 3=a, b ^ 2= b, (ab) ^ 2= 1");
2565
+ [ [ a^3, a ], [ b^2, b ], [ (a*b)^2, <identity ...> ] ]
2566
+ gap> S := F / R;
2567
+ <fp monoid with 2 generators and 3 relations of length 13>
2568
+ gap> Reversed(a * b * b) = b * b * a;
2569
+ true
2570
+ gap> Reversed(a * b * b * a) = a * b * b * a;
2571
+ true
2572
+ gap> Reversed(a * b * b);
2573
+ b^2*a
2574
+ gap> Reversed(a * b * b * a);
2575
+ a*b^2*a
2576
+ gap> Reversed(One(S));
2577
+ <identity ...>
2578
+
2579
+ # AntiIsomorphismDualFpMonoid/Semigroup
2580
+ gap> F := FreeSemigroup("a", "b");
2581
+ <free semigroup on the generators [ a, b ]>
2582
+ gap> AssignGeneratorVariables(F);
2583
+ gap> R := [[a ^ 3, a], [b ^ 2, b], [(a * b) ^ 2, a]];
2584
+ [ [ a^3, a ], [ b^2, b ], [ (a*b)^2, a ] ]
2585
+ gap> S := F / R;
2586
+ <fp semigroup with 2 generators and 3 relations of length 14>
2587
+ gap> map := AntiIsomorphismDualFpSemigroup(S);
2588
+ MappingByFunction( <fp semigroup with 2 generators and
2589
+ 3 relations of length 14>, <fp semigroup with 2 generators and
2590
+ 3 relations of length 14>, function( x ) ... end, function( x ) ... end )
2591
+ gap> RelationsOfFpSemigroup(Range(map));
2592
+ [ [ a^3, a ], [ b^2, b ], [ (b*a)^2, a ] ]
2593
+ gap> F := FreeMonoid("a", "b");
2594
+ <free monoid on the generators [ a, b ]>
2595
+ gap> AssignGeneratorVariables(F);
2596
+ gap> R := [[a ^ 3, One(F)], [b ^ 2, One(F)], [(a * b) ^ 2, One(F)]];
2597
+ [ [ a^3, <identity ...> ], [ b^2, <identity ...> ],
2598
+ [ (a*b)^2, <identity ...> ] ]
2599
+ gap> S := F / R;
2600
+ <fp monoid with 2 generators and 3 relations of length 11>
2601
+ gap> map := AntiIsomorphismDualFpMonoid(S);
2602
+ MappingByFunction( <fp monoid with 2 generators and 3 relations of length 11>
2603
+ , <fp monoid with 2 generators and 3 relations of length 11>
2604
+ , function( x ) ... end, function( x ) ... end )
2605
+ gap> RelationsOfFpMonoid(Range(map));
2606
+ [ [ a^3, <identity ...> ], [ b^2, <identity ...> ],
2607
+ [ (b*a)^2, <identity ...> ] ]
2608
+
2609
+ # EmbeddingFpMonoid
2610
+ gap> F := FreeSemigroup("a", "b");
2611
+ <free semigroup on the generators [ a, b ]>
2612
+ gap> AssignGeneratorVariables(F);
2613
+ gap> R := [[a ^ 3, a], [b ^ 2, b], [(a * b) ^ 2, a]];
2614
+ [ [ a^3, a ], [ b^2, b ], [ (a*b)^2, a ] ]
2615
+ gap> S := F / R;
2616
+ <fp semigroup with 2 generators and 3 relations of length 14>
2617
+ gap> Size(S);
2618
+ 3
2619
+ gap> IsMonoidAsSemigroup(S);
2620
+ false
2621
+ gap> map := EmbeddingFpMonoid(S);
2622
+ <fp semigroup with 2 generators and 3 relations of length 14> ->
2623
+ <fp monoid with 2 generators and 3 relations of length 14>
2624
+ gap> Range(map) = Image(map);
2625
+ false
2626
+ gap> Size(Image(map));
2627
+ 3
2628
+ gap> Size(Range(map));
2629
+ 4
2630
+
2631
+ # EmbeddingFpMonoid
2632
+ gap> F := FreeMonoid("a", "b");
2633
+ <free monoid on the generators [ a, b ]>
2634
+ gap> AssignGeneratorVariables(F);
2635
+ gap> R := [[a ^ 3, a], [b ^ 2, b], [(a * b) ^ 2, a]];
2636
+ [ [ a^3, a ], [ b^2, b ], [ (a*b)^2, a ] ]
2637
+ gap> S := F / R;
2638
+ <fp monoid with 2 generators and 3 relations of length 14>
2639
+ gap> S := Range(IsomorphismFpSemigroup(S));
2640
+ <fp semigroup with 3 generators and 8 relations of length 30>
2641
+ gap> Size(S);
2642
+ 4
2643
+ gap> IsMonoidAsSemigroup(S);
2644
+ true
2645
+ gap> map := EmbeddingFpMonoid(S);
2646
+ <fp semigroup with 3 generators and 8 relations of length 30> ->
2647
+ <fp monoid with 2 generators and 3 relations of length 11>
2648
+ gap> Range(map) = Image(map);
2649
+ true
2650
+ gap> Size(Images(map));
2651
+ 4
2652
+ gap> Size(Range(map));
2653
+ 4
2654
+
2655
+ # IsSubsemigroupOfFpMonoid
2656
+ gap> F := FreeSemigroup("a", "b");
2657
+ <free semigroup on the generators [ a, b ]>
2658
+ gap> AssignGeneratorVariables(F);
2659
+ gap> R := [[a ^ 3, a], [b ^ 2, b], [(a * b) ^ 2, a]];
2660
+ [ [ a^3, a ], [ b^2, b ], [ (a*b)^2, a ] ]
2661
+ gap> S := F / R;
2662
+ <fp semigroup with 2 generators and 3 relations of length 14>
2663
+ gap> IsSubsemigroupOfFpMonoid(S);
2664
+ false
2665
+ gap> map := EmbeddingFpMonoid(S);
2666
+ <fp semigroup with 2 generators and 3 relations of length 14> ->
2667
+ <fp monoid with 2 generators and 3 relations of length 14>
2668
+ gap> IsSubsemigroupOfFpMonoid(Image(map));
2669
+ true
2670
+ gap> IsSubsemigroupOfFpMonoid(Range(map));
2671
+ true
2672
+
2673
+ # Unbind local variables, auto-generated by etc/tst-unbind-local-vars.py
2674
+ gap> Unbind(BruteForceInverseCheck);
2675
+ gap> Unbind(BruteForceIsoCheck);
2676
+ gap> Unbind(F);
2677
+ gap> Unbind(G);
2678
+ gap> Unbind(LoopIterator);
2679
+ gap> Unbind(Noop);
2680
+ gap> Unbind(R);
2681
+ gap> Unbind(S);
2682
+ gap> Unbind(T);
2683
+ gap> Unbind(TestEnumerator);
2684
+ gap> Unbind(TestIterator);
2685
+ gap> Unbind(a);
2686
+ gap> Unbind(b);
2687
+ gap> Unbind(f);
2688
+ gap> Unbind(factorizable);
2689
+ gap> Unbind(inv);
2690
+ gap> Unbind(iso);
2691
+ gap> Unbind(len);
2692
+ gap> Unbind(map);
2693
+ gap> Unbind(rels);
2694
+ gap> Unbind(s);
2695
+ gap> Unbind(tst);
2696
+ gap> Unbind(valid);
2697
+ gap> Unbind(w);
2698
+ gap> Unbind(x);
2699
+ gap> Unbind(y);
2700
+
2701
+ #
2702
+ gap> STOP_TEST("Semigroups package: standard/semigroups/semifp.tst");