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