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

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

Potentially problematic release.


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

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