passagemath-gap-pkg-semigroups 10.6.30__cp312-abi3-macosx_13_0_arm64.whl

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

Potentially problematic release.


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

Files changed (354) hide show
  1. gap/pkg/semigroups/CHANGELOG.md +1699 -0
  2. gap/pkg/semigroups/CONTRIBUTING.md +91 -0
  3. gap/pkg/semigroups/GNUmakefile +110 -0
  4. gap/pkg/semigroups/GNUmakefile.in +110 -0
  5. gap/pkg/semigroups/GPL +674 -0
  6. gap/pkg/semigroups/LICENSE +16 -0
  7. gap/pkg/semigroups/Makefile +26 -0
  8. gap/pkg/semigroups/Makefile.gappkg +225 -0
  9. gap/pkg/semigroups/PackageInfo.g +529 -0
  10. gap/pkg/semigroups/README.md +102 -0
  11. gap/pkg/semigroups/VERSIONS +112 -0
  12. gap/pkg/semigroups/aclocal.m4 +375 -0
  13. gap/pkg/semigroups/autogen.sh +25 -0
  14. gap/pkg/semigroups/bin/aarch64-apple-darwin23-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1158 -0
  17. gap/pkg/semigroups/config.status +1131 -0
  18. gap/pkg/semigroups/config.sub +1960 -0
  19. gap/pkg/semigroups/configure +9742 -0
  20. gap/pkg/semigroups/configure.ac +71 -0
  21. gap/pkg/semigroups/data/doc/greens.pickle +1 -0
  22. gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
  23. gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
  24. gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
  25. gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
  26. gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
  27. gap/pkg/semigroups/data/tst/bipart4 +10 -0
  28. gap/pkg/semigroups/data/tst/pperm10 +1 -0
  29. gap/pkg/semigroups/data/tst/tables.gz +0 -0
  30. gap/pkg/semigroups/data/tst/testdata +1 -0
  31. gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
  32. gap/pkg/semigroups/data/tst/trans3 +7 -0
  33. gap/pkg/semigroups/data/tst/trans3-old +7 -0
  34. gap/pkg/semigroups/environment.yml +7 -0
  35. gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
  36. gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
  37. gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
  38. gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
  39. gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
  40. gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
  41. gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
  42. gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
  43. gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
  44. gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
  45. gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
  46. gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
  47. gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
  48. gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
  49. gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
  50. gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
  51. gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
  52. gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
  53. gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
  54. gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
  55. gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
  56. gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
  57. gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
  58. gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
  59. gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
  60. gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
  61. gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
  62. gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
  63. gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
  64. gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
  65. gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
  66. gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
  67. gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
  68. gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
  69. gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
  70. gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
  71. gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
  72. gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
  73. gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
  74. gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
  75. gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
  76. gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
  77. gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
  78. gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
  79. gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
  80. gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
  81. gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
  82. gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
  83. gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
  84. gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
  85. gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
  86. gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
  87. gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
  88. gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
  89. gap/pkg/semigroups/gap/elements/elements.gd +11 -0
  90. gap/pkg/semigroups/gap/elements/elements.gi +121 -0
  91. gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
  92. gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
  93. gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
  94. gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
  95. gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
  96. gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
  97. gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
  98. gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
  99. gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
  100. gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
  101. gap/pkg/semigroups/gap/elements/star.gd +21 -0
  102. gap/pkg/semigroups/gap/elements/star.gi +21 -0
  103. gap/pkg/semigroups/gap/elements/trans.gd +13 -0
  104. gap/pkg/semigroups/gap/elements/trans.gi +50 -0
  105. gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
  106. gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
  107. gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
  108. gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
  109. gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
  110. gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
  111. gap/pkg/semigroups/gap/fp/word.gd +15 -0
  112. gap/pkg/semigroups/gap/fp/word.gi +67 -0
  113. gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
  114. gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
  115. gap/pkg/semigroups/gap/greens/acting.gd +81 -0
  116. gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
  117. gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
  118. gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
  119. gap/pkg/semigroups/gap/greens/generic.gd +117 -0
  120. gap/pkg/semigroups/gap/greens/generic.gi +630 -0
  121. gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
  122. gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
  123. gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
  124. gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
  125. gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
  126. gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
  127. gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
  128. gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
  129. gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
  130. gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
  131. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
  132. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
  133. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
  134. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
  135. gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
  136. gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
  137. gap/pkg/semigroups/gap/main/acting.gd +36 -0
  138. gap/pkg/semigroups/gap/main/acting.gi +779 -0
  139. gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
  140. gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
  141. gap/pkg/semigroups/gap/main/graded.gd +26 -0
  142. gap/pkg/semigroups/gap/main/graded.gi +355 -0
  143. gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
  144. gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
  145. gap/pkg/semigroups/gap/main/orbits.gd +24 -0
  146. gap/pkg/semigroups/gap/main/orbits.gi +512 -0
  147. gap/pkg/semigroups/gap/main/semiact.gd +20 -0
  148. gap/pkg/semigroups/gap/main/semiact.gi +821 -0
  149. gap/pkg/semigroups/gap/main/setup.gd +61 -0
  150. gap/pkg/semigroups/gap/main/setup.gi +1094 -0
  151. gap/pkg/semigroups/gap/obsolete.gd +9 -0
  152. gap/pkg/semigroups/gap/obsolete.gi +14 -0
  153. gap/pkg/semigroups/gap/options.g +55 -0
  154. gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
  155. gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
  156. gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
  157. gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
  158. gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
  159. gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
  160. gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
  161. gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
  162. gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
  163. gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
  164. gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
  165. gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
  166. gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
  167. gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
  168. gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
  169. gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
  170. gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
  171. gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
  172. gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
  173. gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
  174. gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
  175. gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
  176. gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
  177. gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
  178. gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
  179. gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
  180. gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
  181. gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
  182. gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
  183. gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
  184. gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
  185. gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
  186. gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
  187. gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
  188. gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
  189. gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
  190. gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
  191. gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
  192. gap/pkg/semigroups/gap/tools/display.gd +24 -0
  193. gap/pkg/semigroups/gap/tools/display.gi +749 -0
  194. gap/pkg/semigroups/gap/tools/io.gd +17 -0
  195. gap/pkg/semigroups/gap/tools/io.gi +543 -0
  196. gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
  197. gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
  198. gap/pkg/semigroups/gap/tools/utils.gd +19 -0
  199. gap/pkg/semigroups/gap/tools/utils.gi +756 -0
  200. gap/pkg/semigroups/gapbind14/.ccls +18 -0
  201. gap/pkg/semigroups/gapbind14/.clang-format +104 -0
  202. gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
  203. gap/pkg/semigroups/gapbind14/LICENSE +674 -0
  204. gap/pkg/semigroups/gapbind14/README.md +76 -0
  205. gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
  206. gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
  207. gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
  208. gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
  209. gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
  210. gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
  211. gap/pkg/semigroups/gapbind14/demo/configure +34 -0
  212. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
  213. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
  214. gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
  215. gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
  216. gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
  217. gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
  218. gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
  219. gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
  220. gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
  221. gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
  222. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
  223. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
  224. gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
  225. gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
  226. gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
  227. gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
  228. gap/pkg/semigroups/init.g +150 -0
  229. gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
  230. gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
  231. gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
  232. gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
  233. gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
  234. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
  235. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
  236. gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
  237. gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
  238. gap/pkg/semigroups/m4/find_gap.m4 +94 -0
  239. gap/pkg/semigroups/makedoc.g +153 -0
  240. gap/pkg/semigroups/prerequisites.sh +62 -0
  241. gap/pkg/semigroups/read.g +105 -0
  242. gap/pkg/semigroups/release.toml +6 -0
  243. gap/pkg/semigroups/tst/extreme/README +2 -0
  244. gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
  245. gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
  246. gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
  247. gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
  248. gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
  249. gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
  250. gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
  251. gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
  252. gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
  253. gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
  254. gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
  255. gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
  256. gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
  257. gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
  258. gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
  259. gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
  260. gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
  261. gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
  262. gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
  263. gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
  264. gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
  265. gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
  266. gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
  267. gap/pkg/semigroups/tst/standard/README +2 -0
  268. gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
  269. gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
  270. gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
  271. gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
  272. gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
  273. gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
  274. gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
  275. gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
  276. gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
  277. gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
  278. gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
  279. gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
  280. gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
  281. gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
  282. gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
  283. gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
  284. gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
  285. gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
  286. gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
  287. gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
  288. gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
  289. gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
  290. gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
  291. gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
  292. gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
  293. gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
  294. gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
  295. gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
  296. gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
  297. gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
  298. gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
  299. gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
  300. gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
  301. gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
  302. gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
  303. gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
  304. gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
  305. gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
  306. gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
  307. gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
  308. gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
  309. gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
  310. gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
  311. gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
  312. gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
  313. gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
  314. gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
  315. gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
  316. gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
  317. gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
  318. gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
  319. gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
  320. gap/pkg/semigroups/tst/standard/options.tst +54 -0
  321. gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
  322. gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
  323. gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
  324. gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
  325. gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
  326. gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
  327. gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
  328. gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
  329. gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
  330. gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
  331. gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
  332. gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
  333. gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
  334. gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
  335. gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
  336. gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
  337. gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
  338. gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
  339. gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
  340. gap/pkg/semigroups/tst/testinstall.tst +1815 -0
  341. gap/pkg/semigroups/tst/teststandard.g +22 -0
  342. gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
  343. gap/pkg/semigroups/tst/workspaces/load.g +11 -0
  344. gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
  345. gap/pkg/semigroups/tst/workspaces/save.g +14 -0
  346. passagemath_gap_pkg_semigroups-10.6.30.dist-info/METADATA +93 -0
  347. passagemath_gap_pkg_semigroups-10.6.30.dist-info/METADATA.bak +94 -0
  348. passagemath_gap_pkg_semigroups-10.6.30.dist-info/RECORD +354 -0
  349. passagemath_gap_pkg_semigroups-10.6.30.dist-info/WHEEL +6 -0
  350. passagemath_gap_pkg_semigroups-10.6.30.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.dylibs/libsemigroups.2.dylib +0 -0
  352. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  353. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  354. sage/libs/gap_pkg_semigroups.abi3.so +0 -0
@@ -0,0 +1,1815 @@
1
+ #############################################################################
2
+ ##
3
+ #W testinstall.tst
4
+ #Y Copyright (C) 2011-17 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ #@local B, C, D, F, G, H, I, L, LL, M, M0, P, R, R1, R2, S, T, U, V, W, acting
12
+ #@local bug, c, cong, contain, ec, es, f, file, g, gens, gns, hom, i, id, inv
13
+ #@local iso, iter, latt, log, looking, lookingfor, map, mat, max, n, number, o
14
+ #@local pair, pairs, r, regular, rel, rels, s, s1, s2, sgns, slist, small, t
15
+ #@local tab, tuples, u, x, y, z
16
+ gap> START_TEST("Semigroups package: testinstall.tst");
17
+ gap> LoadPackage("semigroups", false);;
18
+
19
+ # Set info levels and user preferences
20
+ gap> SEMIGROUPS.StartTest();
21
+
22
+ # TestInstall3
23
+ gap> S := Semigroup(Transformation([2, 3, 4, 1, 1, 1]));;
24
+ gap> IsMonoidAsSemigroup(S);
25
+ true
26
+ gap> IsMonoid(S);
27
+ false
28
+ gap> iso := IsomorphismTransformationMonoid(S);;
29
+ gap> IsCommutativeSemigroup(Range(iso));
30
+ true
31
+ gap> IsMonogenicSemigroup(Range(iso));
32
+ true
33
+ gap> RespectsMultiplication(iso);
34
+ true
35
+ gap> ForAll(S, x -> (x ^ iso) ^ InverseGeneralMapping(iso) = x);
36
+ true
37
+
38
+ # TestInstall4
39
+ gap> S := Semigroup(Transformation([1, 1, 1]), Transformation([3, 1, 2]));
40
+ <transformation semigroup of degree 3 with 2 generators>
41
+ gap> IsSimpleSemigroup(S);
42
+ false
43
+
44
+ # TestInstall5
45
+ gap> S := SingularTransformationSemigroup(6);
46
+ <regular transformation semigroup ideal of degree 6 with 1 generator>
47
+ gap> Size(S);
48
+ 45936
49
+
50
+ # TestInstall6
51
+ gap> S := Semigroup(IdentityTransformation, rec(acting := true));;
52
+ gap> LambdaOrb(S);
53
+ <open orbit, 1 points with Schreier tree with log>
54
+ gap> Enumerate(last);
55
+ <closed orbit, 2 points with Schreier tree with log>
56
+
57
+ # TestInstall7
58
+ gap> gens := [Transformation([1, 3, 2, 3]),
59
+ > Transformation([1, 4, 1, 2]),
60
+ > Transformation([3, 4, 2, 2]),
61
+ > Transformation([4, 1, 2, 1])];;
62
+ gap> S := Monoid(gens);;
63
+ gap> Size(S); NrRClasses(S); NrLClasses(S); NrDClasses(S);
64
+ 69
65
+ 17
66
+ 21
67
+ 9
68
+ gap> NrIdempotents(S); NrRegularDClasses(S); IsRegularSemigroup(S);
69
+ 22
70
+ 6
71
+ false
72
+ gap> x := Transformation([1, 3, 4, 1]);;
73
+ gap> x in S;
74
+ false
75
+ gap> x := Transformation([1, 1, 3, 1]);;
76
+ gap> x in S;
77
+ true
78
+ gap> T := Semigroup(gens{[1 .. 3]});
79
+ <transformation semigroup of degree 4 with 3 generators>
80
+ gap> ForAll(T, x -> x in S);
81
+ true
82
+ gap> Size(T);
83
+ 60
84
+
85
+ # TestInstall8: Issue 2
86
+ gap> S := Semigroup(Transformation([4, 4, 4, 4]));;
87
+ gap> AsList(S);
88
+ [ Transformation( [ 4, 4, 4, 4 ] ) ]
89
+
90
+ # TestInstall9: Issue 3
91
+ gap> S := Semigroup(Transformation([3, 5, 5, 5, 3]),
92
+ > Transformation([5, 5, 2, 1, 5]));;
93
+ gap> x := Transformation([3, 3, 5, 3, 3]);;
94
+ gap> IsRegularSemigroupElement(S, x);
95
+ true
96
+ gap> x := Transformation([5, 5, 5, 5, 5]);;
97
+ gap> IsRegularSemigroupElement(S, x);
98
+ true
99
+ gap> x := Transformation([3, 5, 5, 5, 3]);;
100
+ gap> IsRegularSemigroupElement(S, x);
101
+ true
102
+ gap> IsRegularSemigroup(S);
103
+ false
104
+ gap> x := Transformation([5, 5, 2, 1, 5]);;
105
+ gap> IsRegularSemigroupElement(S, x);
106
+ false
107
+
108
+ # TestInstall10: Issue 9
109
+ gap> gens := [Transformation([1, 2, 3, 9, 5, 11, 7, 8, 9, 10, 11, 12]),
110
+ > Transformation([1, 2, 3, 9, 5, 11, 9, 8, 9, 8, 11, 12]),
111
+ > Transformation([1, 2, 5, 7, 8, 11, 9, 12, 9, 12, 11, 10]),
112
+ > Transformation([1, 2, 8, 9, 5, 11, 9, 8, 9, 10, 11, 12]),
113
+ > Transformation([1, 2, 8, 11, 12, 7, 11, 8, 11, 10, 9, 12]),
114
+ > Transformation([1, 2, 10, 9, 12, 11, 9, 10, 9, 8, 11, 12]),
115
+ > Transformation([1, 2, 12, 4, 10, 6, 7, 12, 9, 12, 11, 10]),
116
+ > Transformation([1, 5, 3, 11, 5, 9, 11, 8, 11, 10, 9, 12]),
117
+ > Transformation([1, 5, 8, 6, 12, 7, 11, 10, 11, 10, 9, 12]),
118
+ > Transformation([1, 5, 8, 11, 12, 7, 11, 8, 11, 10, 9, 12]),
119
+ > Transformation([1, 5, 12, 7, 8, 11, 9, 12, 9, 12, 11, 10]),
120
+ > Transformation([1, 8, 3, 9, 5, 11, 9, 8, 9, 10, 11, 12]),
121
+ > Transformation([1, 8, 5, 7, 8, 11, 9, 12, 9, 12, 11, 10]),
122
+ > Transformation([1, 12, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),
123
+ > Transformation([1, 12, 10, 9, 12, 11, 7, 10, 4, 10, 6, 12]),
124
+ > Transformation([2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11]),
125
+ > Transformation([3, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11]),
126
+ > Transformation([5, 6, 7, 8, 11, 12, 10, 9, 10, 9, 12, 11]),
127
+ > Transformation([5, 6, 11, 8, 7, 12, 10, 11, 10, 11, 12, 9]),
128
+ > Transformation([5, 7, 10, 11, 9, 5, 11, 8, 11, 8, 12, 9]),
129
+ > Transformation([5, 10, 7, 5, 10, 11, 12, 9, 12, 9, 11, 8]),
130
+ > Transformation([7, 3, 11, 9, 8, 5, 9, 11, 9, 11, 5, 3]),
131
+ > Transformation([7, 5, 8, 6, 12, 7, 11, 10, 11, 10, 9, 12]),
132
+ > Transformation([7, 12, 11, 10, 5, 9, 10, 11, 8, 11, 9, 12]),
133
+ > Transformation([9, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),
134
+ > Transformation([9, 11, 8, 5, 11, 9, 12, 3, 5, 8, 9, 11]),
135
+ > Transformation([11, 7, 9, 5, 10, 11, 12, 9, 12, 9, 11, 8])];;
136
+ gap> S := Semigroup(gens);;
137
+ gap> NrDClasses(S);
138
+ 232
139
+ gap> Size(S);
140
+ 11858
141
+ gap> NrRClasses(S);
142
+ 1455
143
+ gap> NrLClasses(S);
144
+ 690
145
+ gap> NrHClasses(S);
146
+ 5356
147
+ gap> NrIdempotents(S);
148
+ 300
149
+ gap> Sum(List(GreensDClasses(S), NrRClasses)) = NrRClasses(S);
150
+ true
151
+ gap> ForAll(Concatenation(List(GreensDClasses(S), RClassReps)),
152
+ > x -> x in S);
153
+ true
154
+
155
+ # TestInstall12
156
+ gap> gens := [Transformation([1, 2, 3, 5, 4, 6, 7, 8]),
157
+ > Transformation([4, 4, 3, 1, 5, 6, 3, 8]),
158
+ > Transformation([3, 6, 1, 7, 3, 4, 8, 3]),
159
+ > Transformation([1, 2, 3, 4, 5, 3, 7, 8]),
160
+ > Transformation([1, 2, 3, 4, 1, 6, 7, 8]),
161
+ > Transformation([8, 8, 3, 4, 5, 7, 6, 1])];;
162
+ gap> s := Monoid(gens);
163
+ <transformation monoid of degree 8 with 6 generators>
164
+ gap> t := ClosureSemigroup(s, [Transformation([4, 4, 3, 1, 5, 6, 3, 8])]);
165
+ <transformation monoid of degree 8 with 6 generators>
166
+ gap> Size(t) = Size(Semigroup(Generators(t)));
167
+ true
168
+
169
+ # TestInstall13
170
+ gap> S := Semigroup(Transformation([1, 2, 3, 4, 5, 6, 7, 8, 9]),
171
+ > Transformation([1, 2, 3, 4, 5, 6, 7, 9, 8]),
172
+ > Transformation([7, 2, 8, 4, 5, 6, 1, 9, 8]),
173
+ > Transformation([5, 5, 3, 4, 1, 6, 7, 8, 9]),
174
+ > Transformation([5, 7, 3, 4, 1, 6, 7, 8, 9]),
175
+ > Transformation([1, 2, 8, 6, 5, 4, 7, 9, 8]),
176
+ > Transformation([1, 8, 6, 2, 7, 8, 8, 9, 5]),
177
+ > Transformation([1, 2, 3, 8, 8, 7, 7, 9, 5]),
178
+ > Transformation([1, 2, 3, 1, 8, 7, 7, 5, 9]),
179
+ > Transformation([7, 7, 2, 7, 8, 8, 9, 5, 1]),
180
+ > Transformation([7, 2, 5, 2, 8, 8, 1, 9, 5]),
181
+ > Transformation([7, 2, 8, 1, 8, 7, 1, 9, 5]),
182
+ > Transformation([1, 1, 4, 8, 9, 9, 8, 5, 7]),
183
+ > Transformation([1, 1, 1, 2, 5, 5, 7, 8, 9]),
184
+ > Transformation([1, 2, 1, 1, 8, 7, 7, 5, 9]),
185
+ > Transformation([1, 2, 8, 8, 8, 2, 7, 9, 5]),
186
+ > Transformation([7, 2, 7, 1, 8, 8, 1, 5, 9]),
187
+ > Transformation([8, 8, 2, 8, 5, 5, 9, 7, 1]),
188
+ > Transformation([1, 2, 1, 1, 5, 5, 7, 8, 9]),
189
+ > Transformation([5, 5, 4, 5, 8, 8, 9, 7, 1]),
190
+ > Transformation([1, 2, 8, 8, 8, 1, 7, 9, 5]),
191
+ > Transformation([7, 2, 7, 2, 5, 5, 1, 8, 9]),
192
+ > rec(acting := true));;
193
+ gap> x := Transformation([7, 7, 4, 2, 1, 8, 8, 9, 5]);;
194
+ gap> D := DClass(S, Transformation([1, 8, 6, 2, 7, 8, 8, 9, 5]));;
195
+ gap> L := LClass(D, x);
196
+ <Green's L-class: Transformation( [ 7, 7, 4, 2, 1, 8, 8, 9, 5 ] )>
197
+ gap> LL := LClass(S, x);
198
+ <Green's L-class: Transformation( [ 7, 7, 4, 2, 1, 8, 8, 9, 5 ] )>
199
+ gap> List(HClassReps(LL), x -> x in LL);
200
+ [ true, true, true, true ]
201
+ gap> List(HClassReps(L), x -> x in L);
202
+ [ true, true, true, true ]
203
+ gap> L = LL;
204
+ true
205
+ gap> LL < L;
206
+ false
207
+ gap> L < LL;
208
+ false
209
+ gap> Elements(L) = Elements(LL);
210
+ true
211
+ gap> Size(L); Size(LL);
212
+ 8
213
+ 8
214
+ gap> DClassOfLClass(LL) = DClassOfLClass(L);
215
+ true
216
+ gap> DClassOfLClass(L) = D;
217
+ true
218
+ gap> NrHClasses(L); NrHClasses(LL);
219
+ 4
220
+ 4
221
+ gap> HClassReps(L);
222
+ [ Transformation( [ 1, 8, 4, 2, 7, 8, 8, 9, 5 ] ),
223
+ Transformation( [ 7, 7, 4, 2, 1, 8, 8, 9, 5 ] ),
224
+ Transformation( [ 1, 8, 4, 2, 7, 8, 8, 5 ] ),
225
+ Transformation( [ 7, 7, 4, 2, 1, 8, 8, 5 ] ) ]
226
+ gap> HClassReps(LL);
227
+ [ Transformation( [ 1, 8, 4, 2, 7, 8, 8, 9, 5 ] ),
228
+ Transformation( [ 7, 7, 4, 2, 1, 8, 8, 9, 5 ] ),
229
+ Transformation( [ 1, 8, 4, 2, 7, 8, 8, 5 ] ),
230
+ Transformation( [ 7, 7, 4, 2, 1, 8, 8, 5 ] ) ]
231
+ gap> Idempotents(L);
232
+ [ ]
233
+ gap> Idempotents(LL);
234
+ [ ]
235
+ gap> IsRegularDClass(D);
236
+ false
237
+ gap> Size(S);
238
+ 6982
239
+ gap> Set(HClasses(L)) = Set(HClasses(LL));
240
+ true
241
+ gap> SchutzenbergerGroup(L);
242
+ Group([ (5,9), (1,7) ])
243
+ gap> g := SchutzenbergerGroup(LL);
244
+ Group([ (5,9), (1,7) ])
245
+
246
+ # TestInstall14: IsomorphismTransformationSemigroup/Monoid
247
+ gap> G := Group([(5, 9), (1, 7)]);;
248
+ gap> IsomorphismTransformationSemigroup(G);;
249
+ gap> S := Range(last);
250
+ <transformation group of degree 9 with 2 generators>
251
+ gap> IsGroupAsSemigroup(S);
252
+ true
253
+ gap> Generators(S);
254
+ [ Transformation( [ 1, 2, 3, 4, 9, 6, 7, 8, 5 ] ),
255
+ Transformation( [ 7, 2, 3, 4, 5, 6, 1 ] ) ]
256
+ gap> T := Range(IsomorphismTransformationMonoid(G));
257
+ <transformation group of degree 9 with 2 generators>
258
+ gap> Generators(T);
259
+ [ Transformation( [ 1, 2, 3, 4, 9, 6, 7, 8, 5 ] ),
260
+ Transformation( [ 7, 2, 3, 4, 5, 6, 1 ] ) ]
261
+ gap> H := Range(IsomorphismPermGroup(T));
262
+ Group([ (), (5,9), (1,7) ])
263
+
264
+ # TestInstall15: Issue 22 - takes about 49ms
265
+ gap> x := Transformation([2, 12, 10, 7, 6, 11, 8, 3, 4, 5, 1, 11]);;
266
+ gap> S := FullTransformationSemigroup(12);;
267
+ gap> S := Semigroup(S, rec(acting := true, regular := true));;
268
+ gap> InversesOfSemigroupElement(S, x);
269
+ [ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 3, 3, 6, 2 ] ),
270
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 7, 3, 6, 2 ] ),
271
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 6, 3, 6, 2 ] ),
272
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 2, 3, 6, 2 ] ),
273
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 4, 3, 6, 2 ] ),
274
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 11, 3, 6, 2 ] ),
275
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 1, 3, 6, 2 ] ),
276
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 5, 3, 6, 2 ] ),
277
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 10, 3, 6, 2 ] ),
278
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 9, 3, 6, 2 ] ),
279
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 8, 3, 6, 2 ] ),
280
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 3, 3, 12, 2 ] ),
281
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 7, 3, 12, 2 ] ),
282
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 12, 3, 12, 2 ] ),
283
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 2, 3, 12, 2 ] ),
284
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 4, 3, 12, 2 ] ),
285
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 11, 3, 12, 2 ] ),
286
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 1, 3, 12, 2 ] ),
287
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 5, 3, 12, 2 ] ),
288
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 10, 3, 12, 2 ] ),
289
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 9, 3, 12, 2 ] ),
290
+ Transformation( [ 11, 1, 8, 9, 10, 5, 4, 7, 8, 3, 12, 2 ] ) ]
291
+
292
+ # TestInstall16
293
+ gap> file := Concatenation(PackageInfo("semigroups")[1]!.InstallationPath,
294
+ > "/data/tst/testinstall.pickle");;
295
+ gap> ReadGenerators(file, 1);
296
+ [ <identity partial perm on [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]>,
297
+ <identity partial perm on [ 1, 2, 3, 4, 5, 6, 7, 9 ]>,
298
+ <identity partial perm on [ 1, 2, 3, 4, 5, 6, 9 ]>,
299
+ <identity partial perm on [ 1, 2, 3, 4, 5, 9 ]>,
300
+ <identity partial perm on [ 1, 2, 3, 4, 9 ]>,
301
+ <identity partial perm on [ 1, 2, 3, 9 ]>,
302
+ <identity partial perm on [ 1, 2, 9 ]>, <identity partial perm on [ 1, 9 ]>
303
+ ]
304
+
305
+ # TestInstall17
306
+ gap> S := InverseSemigroup(
307
+ > PartialPermNC([1, 2], [3, 1]),
308
+ > PartialPermNC([1, 2, 3], [1, 3, 4]),
309
+ > PartialPermNC([1, 2, 3], [2, 4, 1]),
310
+ > PartialPermNC([1, 3, 4], [3, 4, 1]));;
311
+ gap> Size(S); NrRClasses(S); NrLClasses(S); NrDClasses(S);
312
+ 116
313
+ 14
314
+ 14
315
+ 4
316
+ gap> NrIdempotents(S); NrRegularDClasses(S); IsRegularSemigroup(S);
317
+ 14
318
+ 4
319
+ true
320
+ gap> ForAll(S, x -> x in S);
321
+ true
322
+ gap> T := InverseSemigroup(Generators(S){[1 .. 3]});
323
+ <inverse partial perm semigroup of rank 4 with 3 generators>
324
+ gap> ForAll(T, x -> x in S);
325
+ true
326
+ gap> Size(T);
327
+ 98
328
+
329
+ # TestInstall18
330
+ gap> S := InverseSemigroup(PartialPermNC([1, 3, 5, 6, 7], [9, 1, 5, 3, 8]),
331
+ > PartialPermNC([1, 2, 3, 5, 6, 7, 9, 10],
332
+ > [4, 10, 5, 6, 7, 1, 3, 2]));;
333
+ gap> x := PartialPermNC([3, 4, 5, 6], [1, 3, 6, 5]);;
334
+ gap> D := DClass(S, x);;
335
+ gap> F := InjectionPrincipalFactor(D);; G := InverseGeneralMapping(F);;
336
+ gap> (x ^ F) ^ G = x;
337
+ true
338
+ gap> ForAll(D, x -> (x ^ F) ^ G = x);
339
+ true
340
+
341
+ # TestInstall18a
342
+ gap> S := InverseSemigroup(PartialPermNC([1, 3, 5, 6, 7], [9, 1, 5, 3, 8]),
343
+ > PartialPermNC([1, 2, 3, 5, 6, 7, 9, 10],
344
+ > [4, 10, 5, 6, 7, 1, 3, 2]));;
345
+ gap> D := DClass(S, PartialPerm([2, 10], [2, 10]));
346
+ <Green's D-class: <identity partial perm on [ 2, 10 ]>>
347
+ gap> F := IsomorphismReesMatrixSemigroup(D);;
348
+ gap> G := InverseGeneralMapping(F);;
349
+ gap> ForAll(D, x -> (x ^ F) ^ G = x);
350
+ true
351
+
352
+ # TestInstall19: from JS' MultiplicativeZero.tst
353
+ gap> S := InverseMonoid(PartialPerm([1, 2, 3, 4]),
354
+ > PartialPerm([1, 3, 2, 4]),
355
+ > PartialPerm([1, 2, 0, 0]),
356
+ > PartialPerm([1, 0, 0, 4]));;
357
+ gap> x := PartialPerm([1, 0, 0, 0]);;
358
+ gap> x in S;
359
+ true
360
+ gap> ForAll(S, y -> x * y = x and y * x = x);
361
+ true
362
+ gap> x;
363
+ <identity partial perm on [ 1 ]>
364
+ gap> MultiplicativeZero(S);
365
+ <identity partial perm on [ 1 ]>
366
+
367
+ # TestInstall20: from JS' PartialPermInjective.tst
368
+ gap> PartialPerm([0, 0, 1, 2]);
369
+ [3,1][4,2]
370
+
371
+ # TestInstall21: from JS' RestricterPartialPerm.tst
372
+ gap> x := PartialPerm([2 .. 7], [1 .. 6]);
373
+ > RestrictedPartialPerm(x, [2 .. 7]);
374
+ [7,6,5,4,3,2,1]
375
+ [7,6,5,4,3,2,1]
376
+
377
+ # TestInstall22: from JS' SizeInverseMonoid.tst
378
+ gap> S := InverseMonoid(PartialPerm([1, 2, 3, 4, 5, 6, 7, 8],
379
+ > [1, 6, 3, 4, 8, 2, 7, 5]),
380
+ > PartialPerm([1, 2, 3, 4, 5, 6, 7, 8],
381
+ > [1, 2, 7, 4, 8, 6, 3, 5]),
382
+ > PartialPerm([1, 4, 5, 8], [1, 4, 5, 8]),
383
+ > PartialPerm([1, 2, 4, 6], [1, 2, 4, 6]),
384
+ > PartialPerm([1, 3, 4, 7], [1, 3, 4, 7]),
385
+ > PartialPerm([1], [1]));;
386
+ gap> [Size(S), Size(AsSet(S))];
387
+ [ 12, 12 ]
388
+
389
+ # TestInstall23: from JS' email
390
+ gap> S := InverseMonoid(PartialPerm([1, 3, 2]), PartialPerm([1]));;
391
+ gap> [Size(S), Size(AsSet(S))];
392
+ [ 3, 3 ]
393
+ gap> Elements(S);
394
+ [ <identity partial perm on [ 1 ]>, <identity partial perm on [ 1, 2, 3 ]>,
395
+ (1)(2,3) ]
396
+
397
+ # TestInstall24
398
+ gap> S := FreeInverseSemigroup(3);
399
+ <free inverse semigroup on the generators [ x1, x2, x3 ]>
400
+ gap> Size(S);
401
+ infinity
402
+ gap> x := S.1;
403
+ x1
404
+ gap> y := S.2;
405
+ x2
406
+ gap> z := S.3;
407
+ x3
408
+ gap> u := x ^ 5 * y ^ 3 * z;
409
+ x1*x1*x1*x1*x1*x2*x2*x2*x3
410
+ gap> u ^ -1;
411
+ x3^-1*x2^-1*x2^-1*x2^-1*x1^-1*x1^-1*x1^-1*x1^-1*x1^-1
412
+ gap> x ^ 2 * y = x ^ 2 * y;
413
+ true
414
+ gap> x * x ^ -1 = y * y ^ -1;
415
+ false
416
+
417
+ # TestInstall25: Issue 27 in the new numbering...
418
+ gap> S := Semigroup(List(GeneratorsOfSemigroup(FullTransformationSemigroup(3)),
419
+ > x -> AsTransformation(x, 4)));;
420
+ gap> IsFullTransformationSemigroup(S);
421
+ true
422
+ gap> IdentityTransformation in S;
423
+ true
424
+
425
+ # TestInstall26: Issue 23 in the new numbering...
426
+ gap> S := FullTransformationSemigroup(3);;
427
+ gap> x := Transformation([4, 3, 1, 2]);;
428
+ gap> ClosureSemigroup(S, x);
429
+ <transformation monoid of degree 4 with 4 generators>
430
+
431
+ # TestInstall27: Issue 36 in the new numbering...
432
+ gap> S := Semigroup(IdentityTransformation);
433
+ <trivial transformation group of degree 0 with 1 generator>
434
+ gap> SmallGeneratingSet(S);
435
+ [ IdentityTransformation ]
436
+
437
+ # TestInstall28: MaximalSubsemigroups of Rees 0-matrix semigroups
438
+ gap> G := Group((1, 2), (3, 4));;
439
+ gap> mat := [[(), ()], [(), 0], [(), (1, 2)]];;
440
+ gap> R := ReesZeroMatrixSemigroup(G, mat);;
441
+ gap> max := MaximalSubsemigroups(R);;
442
+ gap> Length(max);
443
+ 6
444
+ gap> IsDuplicateFreeList(max);
445
+ true
446
+ gap> ForAll(MaximalSubsemigroups(R), U -> IsMaximalSubsemigroup(R, U));
447
+ true
448
+
449
+ # TestInstall29: ClosureSemigroup with an element of higher degree
450
+ gap> S := Semigroup(Transformation([1, 3, 3, 2]),
451
+ > Transformation([4, 1, 4, 2]),
452
+ > Transformation([4, 2, 3, 3]),
453
+ > Transformation([4, 4, 4, 4]));;
454
+ gap> Size(S);
455
+ 130
456
+ gap> x := Transformation([3, 5, 1, 5, 2]);;
457
+ gap> T := ClosureSemigroup(S, x);;
458
+ gap> Size(T);
459
+ 1619
460
+
461
+ # TestInstall30: bug with Elements and IsomorphismPermGroup for group H-class
462
+ gap> R := ReesZeroMatrixSemigroup(Group(()),
463
+ > [[(), (), ()], [(), 0, 0], [(), 0, 0]]);
464
+ <Rees 0-matrix semigroup 3x3 over Group(())>
465
+ gap> R := ReesZeroMatrixSubsemigroup(R, [2, 3], Group(()), [2, 3]);
466
+ <Rees 0-matrix semigroup 2x2 over Group(())>
467
+ gap> H := First(HClasses(R), IsGroupHClass);
468
+ <Green's H-class: 0>
469
+ gap> Elements(H);
470
+ [ 0 ]
471
+ gap> f := IsomorphismPermGroup(H);;
472
+ gap> g := InverseGeneralMapping(f);;
473
+ gap> Elements(H)[1] ^ f;
474
+ ()
475
+ gap> () ^ g;
476
+ 0
477
+
478
+ # TestInstall31: Issue 47: bug in ClosureSemigroup caused which assumed
479
+ # that if the rank of an R-class rep was greater than the maximum rank of the
480
+ # collection being added, then we hadn't seen an R-class rep with the same
481
+ # rho-value before.
482
+ gap> S := Semigroup([Transformation([1, 2, 4, 6, 1, 6]),
483
+ > Transformation([1, 6, 1, 1, 6, 5]),
484
+ > Transformation([2, 6, 2, 4, 3, 2]),
485
+ > Transformation([4, 1, 3, 6, 1, 5]),
486
+ > Transformation([4, 1, 4, 2, 4, 2]),
487
+ > Transformation([6, 6, 4, 6, 1, 1])]);
488
+ <transformation semigroup of degree 6 with 6 generators>
489
+ gap> T := Semigroup([Transformation([1, 5, 3, 4, 5]),
490
+ > Transformation([6, 4, 3, 5, 4, 1]),
491
+ > Transformation([1, 2, 4, 6, 1, 6]),
492
+ > Transformation([1, 5, 1, 6, 3, 1]),
493
+ > Transformation([4, 1, 6, 5, 4, 5]),
494
+ > Transformation([2, 6, 2, 4, 3, 2]),
495
+ > Transformation([2, 1, 2, 4, 4, 2]),
496
+ > Transformation([4, 5, 4, 4, 5, 3]),
497
+ > Transformation([4, 4, 4, 5, 4, 3]),
498
+ > Transformation([6, 1, 6, 6, 4, 6]),
499
+ > Transformation([5, 6, 6, 6, 6, 1]),
500
+ > Transformation([4, 4, 5, 4, 3, 3])]);
501
+ <transformation semigroup of degree 6 with 12 generators>
502
+ gap> IsMaximalSubsemigroup(S, T);
503
+ true
504
+ gap> T := Semigroup(T, rec(small := true));;
505
+ gap> IsMaximalSubsemigroup(S, T);
506
+ true
507
+
508
+ # TestInstall32: From Jack Schmidt 06/02/14 by email
509
+ gap> S := InverseMonoid(
510
+ > PartialPerm(
511
+ > [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
512
+ > 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32],
513
+ > [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 30, 29, 32, 31,
514
+ > 26, 25, 28, 27, 18, 17, 20, 19, 22, 21, 24, 23]),
515
+ > PartialPerm(
516
+ > [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
517
+ > 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32],
518
+ > [1, 10, 16, 7, 5, 14, 4, 11, 9, 2, 8, 15, 13, 6, 12, 3, 17, 22, 32, 27,
519
+ > 21, 18, 28, 31, 25, 30, 20, 23, 29, 26, 24, 19]),
520
+ > PartialPerm([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
521
+ > [1, 2, 3, 4, 16, 15, 13, 14, 10, 9, 12, 11, 7, 8, 6, 5]),
522
+ > PartialPerm([1, 2, 5, 6, 9, 10, 13, 14, 17, 18, 21, 22, 25, 26, 29, 30],
523
+ > [1, 17, 5, 29, 9, 21, 13, 25, 30, 14, 26, 6, 18, 10, 22, 2]),
524
+ > PartialPerm([1, 2, 5, 6, 9, 10, 13, 14, 19, 20, 23, 24, 27, 28, 31, 32],
525
+ > [1, 10, 5, 14, 9, 2, 13, 6, 19, 24, 23, 20, 27, 32, 31, 28]),
526
+ > PartialPerm([1, 6, 9, 14, 18, 22, 25, 29],
527
+ > [1, 6, 9, 14, 18, 22, 25, 29]),
528
+ > PartialPerm([1, 5, 9, 13, 19, 23, 27, 31],
529
+ > [1, 5, 9, 13, 19, 23, 27, 31]),
530
+ > PartialPerm([1, 6, 9, 14, 17, 21, 26, 30],
531
+ > [1, 6, 9, 14, 17, 21, 26, 30]));;
532
+ gap> ForAll(S, x -> ForAll(LClass(S, x), y -> y in S));
533
+ true
534
+
535
+ # TestInstall33: From Jack Schmidt 07/02/14 by email
536
+ gap> AsSet(InverseMonoid(PartialPerm([1, 2]), PartialPerm([1])));
537
+ [ <identity partial perm on [ 1 ]>, <identity partial perm on [ 1, 2 ]> ]
538
+
539
+ # TestInstall34: Issue #57 (problem in INV_KER_TRANS)
540
+ gap> S := Semigroup(Transformation([1, 1, 1]),
541
+ > Transformation([1, 1, 4, 4, 5]));;
542
+ gap> Size(S);
543
+ 2
544
+ gap> IsMonogenicSemigroup(S);
545
+ false
546
+
547
+ # TestInstall35: Issue pointed out by WAW caused by
548
+ # IsInvLambdaOrb being inherited from the argument of ClosureSemigroup
549
+ # by its output, when the output wasn't an InverseOp semigroup...
550
+ gap> S := Semigroup(Bipartition([[1, -2], [2, -3], [3, -1]]),
551
+ > Bipartition([[1, 2, -2], [3, -1, -3]]),
552
+ > Bipartition([[1, -1, -3], [2, -2], [3]]),
553
+ > Bipartition([[1, 3, -1], [2, -2], [-3]]));;
554
+ gap> gens := [Bipartition([[1, 3, -1], [2, -2], [-3]]),
555
+ > Bipartition([[1, -1, -3], [2, -2], [3]]),
556
+ > Bipartition([[1, 2, -2], [3, -1, -3]])];;
557
+ gap> V := SemigroupIdealByGenerators(S, gens);;
558
+ gap> tuples := [Bipartition([[1, -1], [2, -2], [3, -3]])];;
559
+ gap> Semigroup(V, tuples, rec(small := true));;
560
+
561
+ # TestInstall36: Issue pointed out by WAW, caused by typo in ClosureSemigroup
562
+ # (the parent of an R-class was set to be the subsemigroup not the new parent
563
+ # semigroup)
564
+ gap> for i in [1 .. 6] do
565
+ > V := Semigroup([PartialPerm([1, 2, 4, 5, 6], [1, 5, 3, 4, 6]),
566
+ > PartialPerm([1, 2, 4, 5, 6], [2, 1, 5, 4, 3]),
567
+ > PartialPerm([1, 3, 4, 5, 6], [1, 4, 5, 2, 6]),
568
+ > PartialPerm([1, 2, 3, 4, 5], [2, 1, 6, 5, 4]),
569
+ > PartialPerm([1, 2, 3, 6], [4, 3, 2, 6]),
570
+ > PartialPerm([1, 2, 4, 6], [2, 1, 5, 3]),
571
+ > PartialPerm([1, 2, 3, 6], [5, 2, 1, 3]),
572
+ > PartialPerm([2, 3, 4, 6], [3, 2, 1, 6]),
573
+ > PartialPerm([1, 2, 6], [3, 2, 6])],
574
+ > rec(small := true));
575
+ > IsInverseSemigroup(V);
576
+ > od;
577
+
578
+ # TestInstall37: Issue #63 (problem with Monoid and InverseMonoid when one
579
+ # of the arguments is a monoid).
580
+ gap> S := Semigroup(PartialPerm([1, 2, 4, 5, 6], [1, 2, 4, 5, 6]));
581
+ <trivial partial perm group of rank 5 with 1 generator>
582
+ gap> T := Monoid(S, PartialPerm([1, 2, 3, 4, 6], [2, 5, 4, 1, 3]));;
583
+ gap> Length(GeneratorsOfMonoid(T)) = 2;
584
+ true
585
+ gap> One(S) in T;
586
+ true
587
+ gap> One(S) = One(T);
588
+ false
589
+ gap> GeneratorsOfSemigroup(T) =
590
+ > [PartialPerm([1, 2, 3, 4, 5, 6]),
591
+ > PartialPerm([1, 2, 4, 5, 6], [1, 2, 4, 5, 6]),
592
+ > PartialPerm([1, 2, 3, 4, 6], [2, 5, 4, 1, 3])];
593
+ true
594
+ gap> GeneratorsOfMonoid(T) =
595
+ > [PartialPerm([1, 2, 4, 5, 6], [1, 2, 4, 5, 6]),
596
+ > PartialPerm([1, 2, 3, 4, 6], [2, 5, 4, 1, 3])];
597
+ true
598
+ gap> S := InverseSemigroup(PartialPerm([1, 2, 4, 5, 6], [1, 2, 4, 5, 6]));;
599
+ gap> T := InverseMonoid(S, PartialPerm([1, 2, 3, 4, 6], [2, 5, 4, 1, 3]));;
600
+ gap> Length(GeneratorsOfInverseMonoid(T)) = 2;
601
+ true
602
+ gap> GeneratorsOfMonoid(T) =
603
+ > [PartialPerm([1, 2, 4, 5, 6], [1, 2, 4, 5, 6]),
604
+ > PartialPerm([1, 2, 3, 4, 6], [2, 5, 4, 1, 3]),
605
+ > PartialPerm([1, 2, 3, 4, 5], [4, 1, 6, 3, 2])];
606
+ true
607
+ gap> GeneratorsOfSemigroup(T) =
608
+ > [PartialPerm([1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]),
609
+ > PartialPerm([1, 2, 4, 5, 6], [1, 2, 4, 5, 6]),
610
+ > PartialPerm([1, 2, 3, 4, 6], [2, 5, 4, 1, 3]),
611
+ > PartialPerm([1, 2, 3, 4, 5], [4, 1, 6, 3, 2])];
612
+ true
613
+ gap> GeneratorsOfInverseMonoid(T) =
614
+ > [PartialPerm([1, 2, 4, 5, 6], [1, 2, 4, 5, 6]),
615
+ > PartialPerm([1, 2, 3, 4, 6], [2, 5, 4, 1, 3])];
616
+ true
617
+ gap> GeneratorsOfInverseSemigroup(T) =
618
+ > [PartialPerm([1, 2, 4, 5, 6], [1, 2, 4, 5, 6]),
619
+ > PartialPerm([1, 2, 3, 4, 6], [2, 5, 4, 1, 3]),
620
+ > PartialPerm([1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6])];
621
+ true
622
+ gap> One(S) in T;
623
+ true
624
+
625
+ # TestInstall38: Issue 33 (problem with Rees factor semigroups)
626
+ gap> I := SemigroupIdealByGenerators(FullTransformationSemigroup(4),
627
+ > [Transformation([1, 2, 2, 2])]);;
628
+ gap> cong := ReesCongruenceOfSemigroupIdeal(I);;
629
+ gap> hom := HomomorphismQuotientSemigroup(cong);;
630
+ gap> T := Range(hom);;
631
+ gap> IsSemigroup(T);
632
+ true
633
+ gap> Size(T);
634
+ 169
635
+ gap> u := Image(hom, Transformation([1, 1, 1, 1]));
636
+ <2-sided congruence class of Transformation( [ 1, 2, 2, 2 ] )>
637
+ gap> t := Image(hom, Transformation([2, 1, 2, 3]));
638
+ <2-sided congruence class of Transformation( [ 2, 1, 2, 3 ] )>
639
+ gap> u * t;
640
+ <2-sided congruence class of Transformation( [ 1, 2, 2, 2 ] )>
641
+ gap> t * u;
642
+ <2-sided congruence class of Transformation( [ 1, 2, 2, 2 ] )>
643
+ gap> S := Semigroup(u, t);
644
+ <semigroup with 2 generators>
645
+ gap> Size(S);
646
+ 2
647
+
648
+ # TestInstall39: Issue 56
649
+ # (Monoid/InverseMonoid removes One inappropriately sometimes)
650
+ gap> M := InverseMonoid(PartialPerm([1, 2]), PartialPerm([1]));
651
+ <inverse partial perm monoid of rank 2 with 2 generators>
652
+ gap> One(M) in M;
653
+ true
654
+ gap> AsSet(M);
655
+ [ <identity partial perm on [ 1 ]>, <identity partial perm on [ 1, 2 ]> ]
656
+ gap> M := InverseMonoid(PartialPerm([1, 2]), PartialPerm([1]));
657
+ <inverse partial perm monoid of rank 2 with 2 generators>
658
+ gap> AsSet(M);
659
+ [ <identity partial perm on [ 1 ]>, <identity partial perm on [ 1, 2 ]> ]
660
+
661
+ # TestInstall40: Issue 4 in Orb (logs are not properly updated if the
662
+ # enumeration stops early because we find something we are looking for)
663
+ gap> gens := [PartialPerm([1, 2, 4, 5, 6], [1, 2, 4, 5, 6]),
664
+ > PartialPerm([1, 2, 3, 4, 6], [2, 5, 4, 1, 3])];;
665
+ gap> o := Orb([gens[1]], [0], OnPosIntSetsPartialPerm, rec(log := true,
666
+ > lookingfor := function(o, x) return x = [1, 2, 4, 5, 6]; end));
667
+ <open orbit, 1 points looking for sth. with log>
668
+ gap> Enumerate(o);
669
+ <open orbit, 2 points looking for sth. with log>
670
+ gap> o!.looking := false;
671
+ false
672
+ gap> Enumerate(o);
673
+ <closed orbit, 2 points with log>
674
+ gap> o!.logind;
675
+ [ 1, 0 ]
676
+ gap> o!.logpos;
677
+ 3
678
+ gap> o!.log;
679
+ [ -1, 2 ]
680
+ gap> AddGeneratorsToOrbit(o, [gens[2]]);
681
+ <closed orbit, 12 points with log>
682
+
683
+ # TestInstall41: Issue 72
684
+ # (problem with IsomorphismTransformationSemigroup when applied to a
685
+ # binary relation monoid)
686
+ gap> B := Monoid(BinaryRelationOnPoints([[2], [1, 2], [1, 3]]),
687
+ > BinaryRelationOnPoints([[3], [1, 2], [1, 3]]),
688
+ > BinaryRelationOnPoints([[1, 2, 3], [1, 2], [3]]));;
689
+ gap> Size(B);
690
+ 16
691
+ gap> IsMonoid(B);
692
+ true
693
+ gap> iso := IsomorphismTransformationSemigroup(B);;
694
+ gap> T := Range(iso);
695
+ <transformation monoid of degree 6 with 3 generators>
696
+ gap> Size(T);
697
+ 16
698
+ gap> IsMonoid(T);
699
+ true
700
+
701
+ # TestInstall42: Issue 82 (couldn't take quotients by ideals!)
702
+ gap> S := Monoid(
703
+ > Transformation([3, 3, 3, 3]), Transformation([2, 4, 2, 4]),
704
+ > Transformation([2, 3, 2, 3]), Transformation([4, 1, 4, 3]),
705
+ > Transformation([1, 4, 4, 1]), Transformation([2, 2, 3, 1]),
706
+ > Transformation([2, 4, 3, 4]), Transformation([2, 2, 1, 2]),
707
+ > Transformation([2, 2, 1, 3]), Transformation([1, 2, 2, 3]),
708
+ > Transformation([2, 4, 3, 2]), Transformation([2, 3, 3, 3]));;
709
+ gap> I := SemigroupIdeal(S, S.3);;
710
+ gap> IsRegularSemigroup(I);
711
+ true
712
+ gap> S / I;;
713
+
714
+ # TestInstall43: Issue 89
715
+ gap> S := Semigroup(Transformation([2, 1, 3, 1, 4, 3]),
716
+ > Transformation([2, 2, 2, 2, 1, 2]),
717
+ > Transformation([5, 3, 4, 3, 5]),
718
+ > Transformation([6, 4, 1, 4, 5, 3]),
719
+ > Transformation([6, 5, 2, 6, 3, 4]));;
720
+ gap> NrIdempotents(S) = Number(HClasses(S), IsGroupHClass);
721
+ true
722
+
723
+ # TestInstall44: Issue 96 (problem with using the partial order of D-classes
724
+ # as an isomorphism invariant)
725
+ gap> S := Semigroup(Transformation([1, 2, 1]),
726
+ > Transformation([1, 2, 3, 2]),
727
+ > Transformation([2, 2, 2]),
728
+ > Transformation([4, 2, 1, 4]));;
729
+ gap> T := Semigroup(Transformation([1, 2, 3, 1]),
730
+ > Transformation([2, 2, 3, 1]),
731
+ > Transformation([2, 3, 3, 1]),
732
+ > Transformation([1, 3, 3]),
733
+ > Transformation([2, 3, 3, 3]),
734
+ > Transformation([3, 2, 3, 3]));;
735
+ gap> IsIsomorphicSemigroup(S, T);
736
+ true
737
+ gap> SmallestMultiplicationTable(S) = SmallestMultiplicationTable(T);
738
+ true
739
+
740
+ # TestInstall46: Issue 98
741
+ # (incorrect definition of partition monoid on 1 point)
742
+ gap> GeneratorsOfSemigroup(PartitionMonoid(1));
743
+ [ <block bijection: [ 1, -1 ]>, <bipartition: [ 1 ], [ -1 ]> ]
744
+
745
+ # TestInstall47: Issue 101 (incorrect method for
746
+ # DegreeOfTransformationSemigroup for a transformation group with 0 generators)
747
+ gap> G := GroupOfUnits(FullTransformationSemigroup(1));;
748
+ gap> G;
749
+ <trivial transformation group of degree 0 with 1 generator>
750
+
751
+ # TestInstall48: Issue 101
752
+ # (incorrect method for AsPartialPerm for a perm and zero)
753
+ gap> G := GroupOfUnits(Semigroup(PartialPerm([])));;
754
+ gap> G;
755
+ <trivial partial perm group of rank 0 with 1 generator>
756
+
757
+ # TestInstall49: Issue 103
758
+ # (problem with Enumerate(LambdaOrb(I)) when T is an inverse semigroup but
759
+ # doesn't know it at the start)
760
+ gap> S := POI(5);;
761
+ gap> T := Semigroup(S, PartialPerm([1, 2, 3, 4, 5], [2, 3, 4, 5, 1]));;
762
+ gap> I := SemigroupIdeal(T, [PartialPerm([1, 2, 4, 5], [1, 2, 3, 5])]);;
763
+ gap> IsInverseSemigroup(I);
764
+ true
765
+ gap> Size(I);
766
+ 626
767
+
768
+ # TestInstall50: Issue 105 (CyclesOfPartialPerm returned nonsense)
769
+ gap> x := PartialPerm([1, 2, 3, 4, 5, 8, 10], [3, 1, 4, 2, 5, 6, 7]);;
770
+ gap> CyclesOfPartialPerm(x);
771
+ [ [ 5 ], [ 1, 3, 4, 2 ] ]
772
+
773
+ # TestInstall51: Issue 107
774
+ # (problems with Green's classes of ideals, and inverse semigroups)
775
+ gap> S := Monoid(PartialPermNC([1], [1]),
776
+ > PartialPermNC([1], [2]),
777
+ > PartialPermNC([2], [1]));;
778
+ gap> I := SemigroupIdeal(S, PartialPermNC([], []));;
779
+ gap> GeneratorsOfSemigroup(I);
780
+ [ <empty partial perm> ]
781
+
782
+ # TestInstall52: Issue 107 (problems with Green's classes of ideals, and
783
+ # inverse semigroups)
784
+ gap> S := [SymmetricInverseMonoid(2)];;
785
+ gap> S[2] := MaximalSubsemigroups(S[1]);;
786
+ gap> S[3] := List(S[2], MaximalSubsemigroups);;
787
+
788
+ # TestInstall53: Issue 109 (problem with IsReesZeroMatrixSemigroup on the
789
+ # subsemigroup generated by 0)
790
+ gap> R1 := ReesZeroMatrixSemigroup(Group(()), [[()]]);;
791
+ gap> R2 := Semigroup(MultiplicativeZero(R1));;
792
+ gap> IsReesZeroMatrixSubsemigroup(R2);
793
+ true
794
+ gap> IsReesZeroMatrixSemigroup(R2);
795
+ false
796
+
797
+ # TestInstall54: FreeBand
798
+ gap> S := FreeBand("a", "b", "c", "d", "e");
799
+ <free band on the generators [ a, b, c, d, e ]>
800
+ gap> iter := Iterator(S);
801
+ <iterator>
802
+ gap> for i in [1 .. 100] do
803
+ > NextIterator(iter);
804
+ > od;
805
+ gap> x := NextIterator(iter);
806
+ ece
807
+ gap> for i in [1 .. 10] do
808
+ > NextIterator(iter);
809
+ > od;
810
+ gap> y := NextIterator(iter);
811
+ abce
812
+ gap> x * y;
813
+ eceaceababce
814
+ gap> x ^ 2;
815
+ ece
816
+ gap> y ^ 2;
817
+ abce
818
+
819
+ # TestInstall55: Issue 110 (MaximalSubsemigroups for an non-regular RZMS)
820
+ gap> S := ReesZeroMatrixSemigroup(Group(()), [[(), 0], [0, ()]]);;
821
+ gap> S := Semigroup(RMSElement(S, 2, (), 2),
822
+ > RMSElement(S, 1, (), 2));;
823
+ gap> max := MaximalSubsemigroups(S);;
824
+ gap> Length(max);
825
+ 2
826
+ gap> IsDuplicateFreeList(max);
827
+ true
828
+ gap> ForAll(max, x -> IsMaximalSubsemigroup(S, x));
829
+ true
830
+
831
+ # TestInstall56: Issue 122 (Problem with XClassType for inverse ideals)
832
+ gap> S := Semigroup(
833
+ > PartialPerm([1, 2, 3, 4], [2, 3, 4, 1]),
834
+ > PartialPerm([1, 2, 3, 4], [2, 1, 3, 4]),
835
+ > PartialPerm([1, 3], [2, 3]), rec(acting := true));;
836
+ gap> x := PartialPerm([], []);;
837
+ gap> I := SemigroupIdeal(S, x);;
838
+ gap> L := GreensLClassOfElement(I, x);
839
+ <Green's L-class: <empty partial perm>>
840
+ gap> SchutzenbergerGroup(L);
841
+ Group(())
842
+
843
+ # TestInstall57: Issue 123 (Incorrect method for IsZeroSemigroup for
844
+ # non-acting semigroup)
845
+ gap> x := Transformation([1, 1, 2, 3]);;
846
+ gap> S := Semigroup(x);;
847
+ gap> I := SemigroupIdeal(S, x);;
848
+ gap> IsZeroSemigroup(S);
849
+ false
850
+ gap> IsZeroSemigroup(Semigroup(x, rec(acting := false)));
851
+ false
852
+ gap> IsZeroSemigroup(I);
853
+ false
854
+
855
+ # TestInstall58: Issue 121:
856
+ # MultiplicativeZero for full transformation monoid on one point
857
+ gap> T := Transformation([1]);;
858
+ gap> S := Semigroup(T);;
859
+ gap> MultiplicativeZero(S) = T;
860
+ true
861
+ gap> gens := [Transformation([1, 2, 1]), Transformation([1, 2, 2])];;
862
+ gap> S := Semigroup(gens);;
863
+ gap> IsRectangularBand(S) and not IsTrivial(S);
864
+ true
865
+ gap> MultiplicativeZero(S);
866
+ fail
867
+
868
+ # TestInstall59: Issue 88:
869
+ # Something called by `JoinIrreducibleDClasses` of an acting semigroup ideal
870
+ # of a bipartition semigroup calls `GeneratorsOfSemigroup`
871
+ gap> S := InverseMonoid(DualSymmetricInverseMonoid(6), rec(acting := true));;
872
+ gap> x := Bipartition([[1, 2, -3], [3, -1, -2], [4, -4],
873
+ > [5, -5], [6, -6]]);;
874
+ gap> I := SemigroupIdeal(S, x);
875
+ <inverse bipartition semigroup ideal of degree 6 with 1 generator>
876
+ gap> JoinIrreducibleDClasses(I);
877
+ [ <Green's D-class: <block bijection: [ 1, 2, 3, 4, 6, -1, -2, -3, -4, -6 ],
878
+ [ 5, -5 ]>> ]
879
+ gap> I;
880
+ <inverse block bijection semigroup ideal of degree 6 with 1 generator>
881
+ gap> S := InverseMonoid(DualSymmetricInverseMonoid(3));;
882
+ gap> x := Bipartition([[1, 2, -1, -2], [3, -3]]);;
883
+ gap> I := SemigroupIdeal(S, x);
884
+ <inverse bipartition semigroup ideal of degree 3 with 1 generator>
885
+ gap> JoinIrreducibleDClasses(I);
886
+ [ <Green's D-class: <block bijection: [ 1, 2, -1, -2 ], [ 3, -3 ]>> ]
887
+
888
+ # TestInstall60: Issue 94:
889
+ # EquivalenceClasses of trivial congruence returns empty list
890
+ gap> S := FullTransformationSemigroup(6);;
891
+ gap> R := PrincipalFactor(MinimalDClass(S));
892
+ <Rees matrix semigroup 1x6 over Group(())>
893
+ gap> cong := SemigroupCongruenceByGeneratingPairs(R, []);;
894
+ gap> EquivalenceClasses(cong);
895
+ [ <2-sided congruence class of (1,(),1)>,
896
+ <2-sided congruence class of (1,(),2)>,
897
+ <2-sided congruence class of (1,(),3)>,
898
+ <2-sided congruence class of (1,(),4)>,
899
+ <2-sided congruence class of (1,(),5)>,
900
+ <2-sided congruence class of (1,(),6)> ]
901
+
902
+ # TestInstall61: Issue 95:
903
+ # No zero class in semigroup congruence EquivalenceClasses (generating pairs)
904
+ gap> P := [[(), 0, (1, 3), (1, 3), 0, (), 0],
905
+ > [(), (1, 3), 0, 0, (1, 3), (), 0], [(), (1, 3), 0, (), 0, 0, ()],
906
+ > [0, (), (1, 3), (1, 3), (), 0, 0], [0, 0, 0, (), (), (1, 3), ()],
907
+ > [(), 0, (1, 3), 0, (), 0, ()]];;
908
+ gap> R := ReesZeroMatrixSemigroup(Group([(1, 3)]), P);;
909
+ gap> x := ReesZeroMatrixSemigroupElement(R, 1, (1, 3), 1);;
910
+ gap> y := ReesZeroMatrixSemigroupElement(R, 1, (), 1);;
911
+ gap> cong := SemigroupCongruenceByGeneratingPairs(R, [[x, y]]);;
912
+ gap> c := Set(EquivalenceClasses(cong));
913
+ [ <2-sided congruence class of (1,(),1)>,
914
+ <2-sided congruence class of (1,(),2)>,
915
+ <2-sided congruence class of (1,(),3)>,
916
+ <2-sided congruence class of (1,(),4)>,
917
+ <2-sided congruence class of (1,(),5)>,
918
+ <2-sided congruence class of (1,(),6)>,
919
+ <2-sided congruence class of (2,(),1)>,
920
+ <2-sided congruence class of (3,(),1)>,
921
+ <2-sided congruence class of (4,(),1)>,
922
+ <2-sided congruence class of (5,(),1)>,
923
+ <2-sided congruence class of (6,(),1)>,
924
+ <2-sided congruence class of (7,(),1)>, <2-sided congruence class of 0>,
925
+ <2-sided congruence class of (2,(),2)>,
926
+ <2-sided congruence class of (2,(),3)>,
927
+ <2-sided congruence class of (2,(),4)>,
928
+ <2-sided congruence class of (2,(),5)>,
929
+ <2-sided congruence class of (2,(),6)>,
930
+ <2-sided congruence class of (3,(),2)>,
931
+ <2-sided congruence class of (3,(),3)>,
932
+ <2-sided congruence class of (3,(),4)>,
933
+ <2-sided congruence class of (3,(),5)>,
934
+ <2-sided congruence class of (3,(),6)>,
935
+ <2-sided congruence class of (4,(),2)>,
936
+ <2-sided congruence class of (4,(),3)>,
937
+ <2-sided congruence class of (4,(),4)>,
938
+ <2-sided congruence class of (4,(),5)>,
939
+ <2-sided congruence class of (4,(),6)>,
940
+ <2-sided congruence class of (5,(),2)>,
941
+ <2-sided congruence class of (5,(),3)>,
942
+ <2-sided congruence class of (5,(),4)>,
943
+ <2-sided congruence class of (5,(),5)>,
944
+ <2-sided congruence class of (5,(),6)>,
945
+ <2-sided congruence class of (6,(),2)>,
946
+ <2-sided congruence class of (6,(),3)>,
947
+ <2-sided congruence class of (6,(),4)>,
948
+ <2-sided congruence class of (6,(),5)>,
949
+ <2-sided congruence class of (6,(),6)>,
950
+ <2-sided congruence class of (7,(),2)>,
951
+ <2-sided congruence class of (7,(),3)>,
952
+ <2-sided congruence class of (7,(),4)>,
953
+ <2-sided congruence class of (7,(),5)>,
954
+ <2-sided congruence class of (7,(),6)> ]
955
+ gap> ForAny(c, x -> MultiplicativeZero(R) in x);
956
+ true
957
+
958
+ # TestInstall62: Issue 119:
959
+ # Bug in NrEquivalenceClasses for Rees congruences
960
+ gap> I := SemigroupIdealByGenerators(FullTransformationSemigroup(4),
961
+ > [Transformation([1, 2, 2, 2])]);
962
+ <regular transformation semigroup ideal of degree 4 with 1 generator>
963
+ gap> cong := ReesCongruenceOfSemigroupIdeal(I);
964
+ <Rees congruence of <regular transformation semigroup ideal of degree 4 with
965
+ 1 generator> over <full transformation monoid of degree 4>>
966
+ gap> NrEquivalenceClasses(cong);
967
+ 169
968
+
969
+ # TestInstall65: Issue 126:
970
+ gap> mat := [
971
+ > [(), 0, 0, 0, 0],
972
+ > [0, (3, 4), 0, 0, 0],
973
+ > [0, 0, (), 0, 0],
974
+ > [0, 0, 0, (1, 2), 0],
975
+ > [0, 0, 0, 0, (1, 2)(3, 4)]];;
976
+ gap> R := ReesZeroMatrixSemigroup(Group([(1, 2), (3, 4)]), mat);;
977
+ gap> gens := [
978
+ > MultiplicativeZero(R),
979
+ > RMSElement(R, 4, (), 4),
980
+ > RMSElement(R, 4, (1, 2)(3, 4), 4),
981
+ > RMSElement(R, 5, (1, 2)(3, 4), 5),
982
+ > RMSElement(R, 5, (1, 2), 5),
983
+ > RMSElement(R, 4, (1, 2), 4),
984
+ > RMSElement(R, 1, (1, 2), 1),
985
+ > RMSElement(R, 1, (3, 4), 1),
986
+ > RMSElement(R, 2, (3, 4), 2),
987
+ > RMSElement(R, 2, (1, 2), 2),
988
+ > RMSElement(R, 1, (1, 2), 1),
989
+ > RMSElement(R, 3, (), 3),
990
+ > RMSElement(R, 3, (1, 2), 3),
991
+ > RMSElement(R, 1, (1, 2), 1)];;
992
+ gap> U := Semigroup(gens);;
993
+ gap> Filtered(R, x -> x in U);;
994
+ gap> x := RMSElement(R, 1, (), 2);;
995
+ gap> x in U;
996
+ false
997
+ gap> IsInverseSemigroup(U);
998
+ true
999
+ gap> x in U;
1000
+ false
1001
+
1002
+ # TestInstall63: Issue 127:
1003
+ # Bug in Enumerate for an acting semigroup ideal that knows it is regular at its
1004
+ # point of creation.
1005
+ gap> S := Semigroup([[[Z(2) ^ 0, 0 * Z(2), 0 * Z(2), 0 * Z(2)],
1006
+ > [0 * Z(2), Z(2) ^ 0, 0 * Z(2), 0 * Z(2)],
1007
+ > [0 * Z(2), 0 * Z(2), Z(2) ^ 0, 0 * Z(2)],
1008
+ > [0 * Z(2), 0 * Z(2), 0 * Z(2), Z(2) ^ 0]],
1009
+ > [[Z(2 ^ 2), Z(2) ^ 0, Z(2 ^ 2), Z(2) ^ 0],
1010
+ > [Z(2 ^ 2) ^ 2, Z(2 ^ 2), Z(2 ^ 2) ^ 2, Z(2 ^ 2)],
1011
+ > [Z(2) ^ 0, Z(2 ^ 2) ^ 2, Z(2) ^ 0, Z(2 ^ 2) ^ 2],
1012
+ > [Z(2) ^ 0, Z(2 ^ 2) ^ 2, Z(2) ^ 0, Z(2 ^ 2) ^ 2]],
1013
+ > [[0 * Z(2), Z(2 ^ 2) ^ 2, 0 * Z(2), Z(2) ^ 0],
1014
+ > [Z(2 ^ 2) ^ 2, Z(2) ^ 0, 0 * Z(2), Z(2) ^ 0],
1015
+ > [Z(2 ^ 2), Z(2) ^ 0, 0 * Z(2), 0 * Z(2)],
1016
+ > [Z(2 ^ 2) ^ 2, Z(2) ^ 0, 0 * Z(2), Z(2) ^ 0]]]);
1017
+ <monoid with 2 generators>
1018
+ gap> T := AsSemigroup(IsTransformationSemigroup, S);
1019
+ <transformation monoid of size 21, degree 21 with 2 generators>
1020
+ gap> Size(T);
1021
+ 21
1022
+ gap> I := SemigroupIdeal(T, Idempotents(T));;
1023
+ gap> Size(I);
1024
+ 21
1025
+
1026
+ # TestInstall64: Bug fixed by changeset 949553d
1027
+ gap> S := InverseSemigroup(PartialPerm([1], [2]), PartialPerm([2], [1]));
1028
+ <inverse partial perm semigroup of rank 2 with 2 generators>
1029
+ gap> Size(S);
1030
+ 5
1031
+ gap> C := SemigroupCongruence(S, [S.1, S.1 * S.2]);
1032
+ <universal semigroup congruence over <0-simple inverse partial perm semigroup
1033
+ of size 5, rank 2 with 2 generators>>
1034
+ gap> IsUniversalSemigroupCongruence(C);
1035
+ true
1036
+
1037
+ # TestInstall65: Fixed bug where the GeneratorsOfMonoid were incorrectly set
1038
+ # for partial perm monoids/inverse monoids, due to removal of the One.
1039
+ gap> S := Semigroup(PartialPerm([1]), PartialPerm([]));
1040
+ <partial perm monoid of rank 1 with 2 generators>
1041
+ gap> S := Monoid(PartialPerm([1]), PartialPerm([]));
1042
+ <partial perm monoid of rank 1 with 2 generators>
1043
+ gap> S := InverseSemigroup(PartialPerm([1]), PartialPerm([]));
1044
+ <inverse partial perm monoid of rank 1 with 2 generators>
1045
+ gap> S := InverseMonoid(PartialPerm([1]), PartialPerm([]));
1046
+ <inverse partial perm monoid of rank 1 with 2 generators>
1047
+
1048
+ # TestInstall66: semigroups with 0 generators are not allowed in Semigroups,
1049
+ #i.e. this example shouldn't use Semigroups code and this is here to make sure
1050
+ #that it does not. This is from bugfix.tst.
1051
+ gap> AsGroup([-1, 1]);
1052
+ fail
1053
+
1054
+ # TestInstall67: semigroups with infinity generators are not allowed in
1055
+ # Semigroups, i.e. this example shouldn't use Semigroups code and this is here
1056
+ # to make sure that it does not. This is from bugfix.tst.
1057
+ gap> FreeMonoid(infinity, "m", []);
1058
+ <free monoid with infinity generators>
1059
+
1060
+ # TestInstall65: Issue #131
1061
+ gap> S := FullTransformationSemigroup(3);;
1062
+ gap> I := SemigroupIdeal(FullTransformationSemigroup(3),
1063
+ > Transformation([1, 1, 2]));;
1064
+ gap> T := S / I;;
1065
+ gap> One(T);
1066
+ <2-sided congruence class of IdentityTransformation>
1067
+
1068
+ # TestInstall66: Second bug in Issue #131
1069
+ gap> I := SemigroupIdeal(FullTransformationSemigroup(3),
1070
+ > Transformation([1, 1, 1]));;
1071
+ gap> hom := HomomorphismQuotientSemigroup(ReesCongruenceOfSemigroupIdeal(I));;
1072
+ gap> map := IsomorphismTransformationSemigroup(Range(hom));;
1073
+
1074
+ # Checking for correct non-removal of one from generating sets in
1075
+ # SemigroupByGenerators
1076
+ gap> S := Semigroup(PartialPerm([1]));
1077
+ <trivial partial perm group of rank 1 with 1 generator>
1078
+ gap> GeneratorsOfSemigroup(S);
1079
+ [ <identity partial perm on [ 1 ]> ]
1080
+ gap> GeneratorsOfMonoid(S);
1081
+ [ <identity partial perm on [ 1 ]> ]
1082
+ gap> GeneratorsOfInverseSemigroup(S);
1083
+ [ <identity partial perm on [ 1 ]> ]
1084
+ gap> GeneratorsOfInverseMonoid(S);
1085
+ [ <identity partial perm on [ 1 ]> ]
1086
+ gap> S := Semigroup(IdentityTransformation);
1087
+ <trivial transformation group of degree 0 with 1 generator>
1088
+ gap> GeneratorsOfSemigroup(S);
1089
+ [ IdentityTransformation ]
1090
+ gap> GeneratorsOfMonoid(S);
1091
+ [ IdentityTransformation ]
1092
+
1093
+ # Checking for correct non-removal of one from generating sets in
1094
+ # MonoidByGenerators
1095
+ gap> S := Monoid(PartialPerm([1]));
1096
+ <trivial partial perm group of rank 1 with 1 generator>
1097
+ gap> S := Monoid(PartialPerm([1]));
1098
+ <trivial partial perm group of rank 1 with 1 generator>
1099
+ gap> GeneratorsOfSemigroup(S);
1100
+ [ <identity partial perm on [ 1 ]> ]
1101
+ gap> GeneratorsOfMonoid(S);
1102
+ [ <identity partial perm on [ 1 ]> ]
1103
+ gap> GeneratorsOfInverseSemigroup(S);
1104
+ [ <identity partial perm on [ 1 ]> ]
1105
+ gap> GeneratorsOfInverseMonoid(S);
1106
+ [ <identity partial perm on [ 1 ]> ]
1107
+ gap> S := Monoid(IdentityTransformation);
1108
+ <trivial transformation group of degree 0 with 1 generator>
1109
+ gap> GeneratorsOfSemigroup(S);
1110
+ [ IdentityTransformation ]
1111
+ gap> GeneratorsOfMonoid(S);
1112
+ [ IdentityTransformation ]
1113
+
1114
+ # Checking for correct non-removal of one from generating sets in
1115
+ # InverseSemigroupByGenerators JDM
1116
+ gap> S := InverseSemigroup(PartialPerm([1]));
1117
+ <trivial partial perm group of rank 1 with 1 generator>
1118
+ gap> GeneratorsOfSemigroup(S);
1119
+ [ <identity partial perm on [ 1 ]> ]
1120
+ gap> GeneratorsOfMonoid(S);
1121
+ [ <identity partial perm on [ 1 ]> ]
1122
+ gap> GeneratorsOfInverseSemigroup(S);
1123
+ [ <identity partial perm on [ 1 ]> ]
1124
+ gap> GeneratorsOfInverseMonoid(S);
1125
+ [ <identity partial perm on [ 1 ]> ]
1126
+ gap> S := InverseSemigroup(IdentityTransformation);
1127
+ <trivial transformation group of degree 0 with 1 generator>
1128
+ gap> GeneratorsOfSemigroup(S);
1129
+ [ IdentityTransformation ]
1130
+ gap> GeneratorsOfMonoid(S);
1131
+ [ IdentityTransformation ]
1132
+ gap> GeneratorsOfInverseSemigroup(S);
1133
+ [ IdentityTransformation ]
1134
+ gap> GeneratorsOfInverseMonoid(S);
1135
+ [ IdentityTransformation ]
1136
+
1137
+ # Checking for correct non-removal of one from generating sets in
1138
+ # InverseMonoidByGenerators JDM
1139
+ gap> S := InverseMonoid(PartialPerm([1]));
1140
+ <trivial partial perm group of rank 1 with 1 generator>
1141
+ gap> GeneratorsOfSemigroup(S);
1142
+ [ <identity partial perm on [ 1 ]> ]
1143
+ gap> GeneratorsOfMonoid(S);
1144
+ [ <identity partial perm on [ 1 ]> ]
1145
+ gap> GeneratorsOfInverseSemigroup(S);
1146
+ [ <identity partial perm on [ 1 ]> ]
1147
+ gap> GeneratorsOfInverseMonoid(S);
1148
+ [ <identity partial perm on [ 1 ]> ]
1149
+ gap> S := InverseMonoid(IdentityTransformation);
1150
+ <trivial transformation group of degree 0 with 1 generator>
1151
+ gap> GeneratorsOfSemigroup(S);
1152
+ [ IdentityTransformation ]
1153
+ gap> GeneratorsOfMonoid(S);
1154
+ [ IdentityTransformation ]
1155
+ gap> GeneratorsOfInverseSemigroup(S);
1156
+ [ IdentityTransformation ]
1157
+ gap> GeneratorsOfInverseMonoid(S);
1158
+ [ IdentityTransformation ]
1159
+
1160
+ # Checking GroupByGenerators
1161
+ gap> S := Group(PartialPerm([1]));
1162
+ <trivial partial perm group of rank 1 with 1 generator>
1163
+ gap> GeneratorsOfSemigroup(S);
1164
+ [ <identity partial perm on [ 1 ]> ]
1165
+ gap> GeneratorsOfMonoid(S);
1166
+ [ <identity partial perm on [ 1 ]> ]
1167
+ gap> GeneratorsOfGroup(S);
1168
+ [ <identity partial perm on [ 1 ]> ]
1169
+ gap> GeneratorsOfInverseSemigroup(S);
1170
+ [ <identity partial perm on [ 1 ]> ]
1171
+ gap> GeneratorsOfInverseMonoid(S);
1172
+ [ <identity partial perm on [ 1 ]> ]
1173
+ gap> S := Group(IdentityTransformation);;
1174
+ gap> IsGroup(S) and IsGroupAsSemigroup(S) and IsTrivial(S);
1175
+ true
1176
+ gap> GeneratorsOfSemigroup(S);
1177
+ [ IdentityTransformation ]
1178
+ gap> GeneratorsOfMonoid(S);
1179
+ [ IdentityTransformation ]
1180
+ gap> GeneratorsOfGroup(S);
1181
+ [ IdentityTransformation ]
1182
+ gap> GeneratorsOfInverseSemigroup(S);
1183
+ [ IdentityTransformation ]
1184
+ gap> GeneratorsOfInverseMonoid(S);
1185
+ [ IdentityTransformation ]
1186
+
1187
+ # Test for Issue 136
1188
+ gap> S := Semigroup(PartialPerm([2, 0]));
1189
+ <commutative partial perm semigroup of rank 1 with 1 generator>
1190
+ gap> CyclesOfPartialPermSemigroup(S);
1191
+ [ ]
1192
+
1193
+ # AsXSemigroup for trivial transformation semigroup
1194
+ gap> S := Semigroup(IdentityTransformation);
1195
+ <trivial transformation group of degree 0 with 1 generator>
1196
+ gap> AsSemigroup(IsTransformationSemigroup, S);
1197
+ <trivial transformation group of degree 0 with 1 generator>
1198
+ gap> AsSemigroup(IsPartialPermSemigroup, S);
1199
+ <trivial partial perm group of rank 0 with 1 generator>
1200
+ gap> AsSemigroup(IsBipartitionSemigroup, S);
1201
+ <trivial block bijection group of degree 1 with 1 generator>
1202
+ gap> AsSemigroup(IsPBRSemigroup, S);
1203
+ <trivial pbr group of degree 1 with 1 generator>
1204
+ gap> AsSemigroup(IsBooleanMatSemigroup, S);
1205
+ <trivial group of 1x1 boolean matrices with 1 generator>
1206
+
1207
+ # Issue #138: InversesOfSemigroupElement for trivial transformation monoid
1208
+ gap> x := IdentityTransformation;;
1209
+ gap> InversesOfSemigroupElement(FullTransformationMonoid(1), x);
1210
+ [ IdentityTransformation ]
1211
+
1212
+ # GroupOfUnits error (Monoid used inappropriately instead of Semigroup)
1213
+ gap> S := Semigroup([Bipartition([[1], [-1]])]);
1214
+ <commutative bipartition semigroup of degree 1 with 1 generator>
1215
+ gap> Size(S);
1216
+ 1
1217
+ gap> Size(GroupOfUnits(S));
1218
+ 1
1219
+ gap> S := Semigroup(IdentityTransformation);
1220
+ <trivial transformation group of degree 0 with 1 generator>
1221
+ gap> GroupOfUnits(S);
1222
+ <trivial transformation group of degree 0 with 1 generator>
1223
+ gap> Size(GroupOfUnits(S));
1224
+ 1
1225
+ gap> S := Semigroup(Transformation([1, 1]));
1226
+ <commutative transformation semigroup of degree 2 with 1 generator>
1227
+ gap> Size(GroupOfUnits(S));
1228
+ 1
1229
+
1230
+ # IsInverseSemigroup fall back method was wrong.
1231
+ gap> S := Semigroup([Bipartition([[1, 2], [-1], [-2]]),
1232
+ > Bipartition([[1, -1], [2], [-2]]),
1233
+ > Bipartition([[1], [2, -1], [-2]]),
1234
+ > Bipartition([[1, -2], [2], [-1]]),
1235
+ > Bipartition([[1], [2, -2], [-1]]),
1236
+ > Bipartition([[1], [2], [-1], [-2]])]);;
1237
+ gap> IsInverseSemigroup(S);
1238
+ false
1239
+ gap> S := Semigroup(S, rec(acting := false));;
1240
+ gap> IsInverseSemigroup(S);
1241
+ false
1242
+
1243
+ # Bipartition semigroups of degree 0, Issue #139
1244
+ gap> AsSemigroup(IsBipartitionSemigroup, CyclicGroup(IsPermGroup, 1));
1245
+ <trivial block bijection group of degree 0 with 1 generator>
1246
+ gap> AsSemigroup(IsBipartitionSemigroup, Group(()));
1247
+ <trivial block bijection group of degree 0 with 1 generator>
1248
+ gap> Semigroup(Bipartition([]));
1249
+ <trivial block bijection group of degree 0 with 1 generator>
1250
+ gap> JonesMonoid(0);
1251
+ <trivial block bijection group of degree 0 with 1 generator>
1252
+ gap> PartitionMonoid(0);
1253
+ <trivial block bijection group of degree 0 with 1 generator>
1254
+
1255
+ # Fixed unconvert for matrix over semiring
1256
+ gap> S := FullTropicalMinPlusMonoid(2, 3);
1257
+ <monoid of 2x2 tropical min-plus matrices with 7 generators>
1258
+ gap> AsSemigroup(IsTransformationSemigroup, S);
1259
+ <transformation monoid of size 625, degree 625 with 7 generators>
1260
+
1261
+ # Test for not being allowed to generate a semigroup with bipartitions of
1262
+ # different degree
1263
+ gap> Semigroup(Bipartition([[-1, 1]]), Bipartition([]));
1264
+ Error, Usage: Semigroup(<gen>,...), Semigroup(<gens>), Semigroup(<D>),
1265
+
1266
+ # Test for not being allowed to generate a semigroup with matrices of
1267
+ # different dimensions
1268
+ gap> Semigroup(
1269
+ > Matrix(Integers, [[0, -3, 0, -2],
1270
+ > [-1, 1, -1, 0],
1271
+ > [0, 1, 0, 1],
1272
+ > [0, 0, 2, 0]]),
1273
+ > Matrix(Integers, [[4, 0, -2],
1274
+ > [1, -3, 0],
1275
+ > [5, -1, -4]]));
1276
+ Error, Usage: Semigroup(<gen>,...), Semigroup(<gens>), Semigroup(<D>),
1277
+
1278
+ # Test for Issue 141
1279
+ gap> S := Semigroup(Bipartition ([[1, 4], [2, 3], [-1, -4], [-2, -3]]),
1280
+ > Bipartition([[1, 2], [3, 4], [-1, -4], [-2, -3]]));;
1281
+ gap> PartialOrderOfDClasses(S);
1282
+ <immutable empty digraph with 1 vertex>
1283
+
1284
+ # Test for Issue 144
1285
+ gap> S := Semigroup(Bipartition([[1, 2], [-1], [-2]]),
1286
+ > Bipartition([[1, -1], [2], [-2]]),
1287
+ > Bipartition([[1], [2, -1], [-2]]),
1288
+ > Bipartition([[1, -2], [2], [-1]]),
1289
+ > Bipartition([[1], [2, -2], [-1]]),
1290
+ > Bipartition([[1], [2], [-1], [-2]]));;
1291
+ gap> IsInverseSemigroup(S);
1292
+ false
1293
+ gap> S := Semigroup(Bipartition([[1, 2], [-1], [-2]]),
1294
+ > Bipartition([[1, -1], [2], [-2]]),
1295
+ > Bipartition([[1], [2, -1], [-2]]),
1296
+ > Bipartition([[1, -2], [2], [-1]]),
1297
+ > Bipartition([[1], [2, -2], [-1]]),
1298
+ > Bipartition([[1], [2], [-1], [-2]]));;
1299
+ gap> NrDClasses(S);;
1300
+ gap> IsInverseSemigroup(S);
1301
+ false
1302
+
1303
+ # MaximalSubsemigroups, replacement test for manual example which becomes a
1304
+ #log because of the randomness in the generating sets here.
1305
+ gap> S := FullTransformationMonoid(4);;
1306
+ gap> Length(MaximalSubsemigroups(S)) = 9;
1307
+ true
1308
+ gap> ForAll(MaximalSubsemigroups(S), M -> M in
1309
+ > [Semigroup(Transformation([1, 4, 2, 3]),
1310
+ > Transformation([4, 2, 3, 4]),
1311
+ > Transformation([4, 3, 2, 1])),
1312
+ > Semigroup(Transformation([1, 1, 2, 3]),
1313
+ > Transformation([1, 2, 4, 3]),
1314
+ > Transformation([4, 2, 3, 4]),
1315
+ > Transformation([4, 3, 2, 1])),
1316
+ > Semigroup(Transformation([1, 1, 2, 3]),
1317
+ > Transformation([1, 3, 1, 2]),
1318
+ > Transformation([1, 4, 3, 2]),
1319
+ > Transformation([2, 1, 4, 3])),
1320
+ > Semigroup(Transformation([1, 3, 2]),
1321
+ > Transformation([2, 1, 3, 1]),
1322
+ > Transformation([3, 4, 1, 2]),
1323
+ > Transformation([3, 4, 1, 3])),
1324
+ > Semigroup(Transformation([1, 2, 4, 3]),
1325
+ > Transformation([1, 4, 2, 3]),
1326
+ > Transformation([2, 3, 1, 1]),
1327
+ > Transformation([2, 3, 1, 2]),
1328
+ > Transformation([4, 2, 3, 4])),
1329
+ > Semigroup(Transformation([1, 1, 2, 3]),
1330
+ > Transformation([1, 3, 2]),
1331
+ > Transformation([3, 1, 2]),
1332
+ > Transformation([4, 1, 2, 4])),
1333
+ > Semigroup(Transformation([2, 1]),
1334
+ > Transformation([2, 3, 1, 1]),
1335
+ > Transformation([4, 1, 2, 4]),
1336
+ > Transformation([4, 1, 3, 2])),
1337
+ > Semigroup(Transformation([2, 1, 3, 1]),
1338
+ > Transformation([3, 4, 1, 3]),
1339
+ > Transformation([4, 2, 1, 3]),
1340
+ > Transformation([4, 2, 3, 1])),
1341
+ > Semigroup(Transformation([2, 1]),
1342
+ > Transformation([2, 3, 4, 1]),
1343
+ > Transformation([3, 1, 3, 3]),
1344
+ > Transformation([4, 3, 3, 4]))]);
1345
+ true
1346
+
1347
+ # Test for not being allowed to generate a semigroup with bipartitions of
1348
+ # different degree
1349
+ gap> Semigroup(Bipartition([[-1, 1]]), Bipartition([]));
1350
+ Error, Usage: Semigroup(<gen>,...), Semigroup(<gens>), Semigroup(<D>),
1351
+
1352
+ # Issue 150: Bug in RepresentativeOfMinimalIdeal
1353
+ gap> S := Semigroup([PartialPerm([1, 2], [3, 2])]);;
1354
+ gap> RepresentativeOfMinimalIdeal(S);
1355
+ <identity partial perm on [ 2 ]>
1356
+ gap> IsZeroSimpleSemigroup(S);
1357
+ false
1358
+
1359
+ # Issue 152: Bug in IsomorphismPermGroup for non-perm transformations
1360
+ gap> S := Semigroup(Transformation([1, 3, 2, 1]),
1361
+ > Transformation([2, 1, 3, 2]));;
1362
+ gap> iso := IsomorphismPermGroup(S);;
1363
+ gap> inv := InverseGeneralMapping(iso);;
1364
+ gap> ForAll(S, x -> (x ^ iso) ^ inv = x);
1365
+ true
1366
+
1367
+ # Issue 160: Bug in IrreundantGeneratingSubset for a semigroup with a single
1368
+ # repeated generator
1369
+ gap> S := Semigroup([Transformation([1, 1]), Transformation([1, 1])]);
1370
+ <transformation semigroup of degree 2 with 2 generators>
1371
+ gap> IrredundantGeneratingSubset(S);
1372
+ [ Transformation( [ 1, 1 ] ) ]
1373
+
1374
+ # Issue 164: Bug in MatrixEntries for a Rees 0-matrix semigroup
1375
+ gap> S := Semigroup(SymmetricInverseMonoid(2));;
1376
+ gap> id := Identity(S);;
1377
+ gap> R := ReesZeroMatrixSemigroup(S, [[id], [0]]);;
1378
+ gap> MatrixEntries(R);
1379
+ [ 0, <identity partial perm on [ 1, 2 ]> ]
1380
+
1381
+ # Test for bug in kernel module
1382
+ gap> AsList(JonesMonoid(1));
1383
+ [ <block bijection: [ 1, -1 ]> ]
1384
+
1385
+ # Kernel-trace methods should only be selected for semigroups with inverse op
1386
+ gap> S := HallMonoid(2);;
1387
+ gap> latt := LatticeOfCongruences(S);;
1388
+ gap> IsIsomorphicDigraph(latt, DigraphFromDigraph6String("&C|E["));
1389
+ true
1390
+ gap> IsPartialOrderDigraph(latt);
1391
+ true
1392
+
1393
+ # Test bug in \in for high degree transformation semigroup
1394
+ gap> S := Semigroup(Transformation([4, 3, 2, 1]),
1395
+ > Transformation([3, 2, 3, 2]),
1396
+ > Transformation([1, 1, 2, 4]),
1397
+ > Transformation([1, 4, 3, 1]));;
1398
+ gap> T := Range(AntiIsomorphismTransformationSemigroup(S));;
1399
+ gap> M := MaximalSubsemigroups(T);;
1400
+ gap> T in M;
1401
+ false
1402
+
1403
+ # Test for Issue 217 (bug in \in for L-class of inverse semigroups)
1404
+ gap> S := InverseMonoid(PartialPerm([2, 3, 4, 5, 6], [1, 2, 3, 4, 5]),
1405
+ > PartialPerm([1, 2, 3, 4, 5], [1, 2, 3, 4, 6]),
1406
+ > PartialPerm([1, 2, 3, 4, 6], [1, 2, 3, 5, 6]),
1407
+ > PartialPerm([1, 2, 3, 5, 6], [1, 2, 4, 5, 6]),
1408
+ > PartialPerm([1, 2, 4, 5, 6], [1, 3, 4, 5, 6]),
1409
+ > PartialPerm([1, 3, 4, 5, 6], [2, 3, 4, 5, 6]),
1410
+ > PartialPerm([1, 2, 3, 4, 5, 6], [6, 5, 4, 3, 2, 1]));;
1411
+ gap> NrMaximalSubsemigroups(S);
1412
+ 11
1413
+ gap> y := PartialPerm([1, 2, 3, 4, 5], [6, 5, 4, 2, 1]);;
1414
+ gap> D := DClass(S, y);;
1415
+ gap> y in D;
1416
+ true
1417
+ gap> ForAny(LClasses(D), L -> y in L);
1418
+ true
1419
+ gap> ForAll(LClasses(D), L -> ForAll(L, x -> x in L));
1420
+ true
1421
+
1422
+ # Bug in AsInverseSemigroupCongruenceByKernelTrace - abnormal trace
1423
+ gap> S := InverseSemigroup([PartialPerm([1, 2, 3], [5, 1, 2]),
1424
+ > PartialPerm([1, 2, 3, 4, 6], [3, 6, 4, 1, 5]),
1425
+ > PartialPerm([1, 2, 3, 4], [6, 1, 4, 2]),
1426
+ > PartialPerm([1, 3, 6], [4, 5, 2]),
1427
+ > PartialPerm([1, 3, 6], [1, 3, 6])]);;
1428
+ gap> pairs := [[PartialPerm([5], [1]), PartialPerm([], [])],
1429
+ > [PartialPerm([1, 2, 3, 4], [1, 2, 3, 4]),
1430
+ > PartialPerm([1, 3, 4, 6], [1, 3, 4, 6])]];;
1431
+ gap> cong := SemigroupCongruence(S, pairs);;
1432
+ gap> NrEquivalenceClasses(cong);
1433
+ 32
1434
+
1435
+ # Bug in AsInverseSemigroupCongruenceByKernelTrace - abnormal kernel
1436
+ gap> S := InverseSemigroup([PartialPerm([1, 2], [1, 6]),
1437
+ > PartialPerm([1, 2, 4, 5], [1, 4, 5, 3]),
1438
+ > PartialPerm([1, 3, 4], [1, 2, 5]),
1439
+ > PartialPerm([1, 2, 3, 5, 6], [5, 1, 6, 2, 4]),
1440
+ > PartialPerm([1, 2, 3, 5, 6], [5, 4, 3, 1, 2])]);;
1441
+ gap> pairs := [[PartialPerm([2, 5, 6], [1, 6, 5]),
1442
+ > PartialPerm([2, 5, 6], [5, 1, 6])],
1443
+ > [PartialPerm([5], [2]), PartialPerm([1, 5], [5, 4])]];;
1444
+ gap> cong := SemigroupCongruence(S, pairs);;
1445
+ gap> NrEquivalenceClasses(cong);
1446
+ 954
1447
+
1448
+ # Fix for Issue 230: bug in MaximalSubsemigroups
1449
+ gap> mat := [
1450
+ > [(), 0, 0, 0, 0, 0],
1451
+ > [0, (), 0, 0, 0, 0],
1452
+ > [0, 0, (), 0, 0, 0],
1453
+ > [0, 0, 0, (), 0, 0],
1454
+ > [0, 0, 0, 0, (), 0],
1455
+ > [0, 0, 0, 0, 0, ()]];;
1456
+ gap> R := ReesZeroMatrixSemigroup(Group([(1, 5, 4, 3, 2), (1, 5)(2, 4)]),
1457
+ > mat);;
1458
+ gap> contain := [
1459
+ > RMSElement(R, 1, (1, 5)(2, 4), 6),
1460
+ > RMSElement(R, 1, (), 6),
1461
+ > RMSElement(R, 2, (1, 2, 3, 4, 5), 1),
1462
+ > RMSElement(R, 2, (), 5),
1463
+ > RMSElement(R, 3, (), 2),
1464
+ > RMSElement(R, 3, (1, 3)(4, 5), 4),
1465
+ > RMSElement(R, 4, (), 3),
1466
+ > RMSElement(R, 4, (1, 3)(4, 5), 3),
1467
+ > RMSElement(R, 5, (1, 3)(4, 5), 4),
1468
+ > RMSElement(R, 5, (), 2),
1469
+ > RMSElement(R, 6, (1, 5, 4, 3, 2), 5),
1470
+ > RMSElement(R, 6, (), 1)];;
1471
+ gap> MaximalSubsemigroups(R, rec(number := true, contain := contain));
1472
+ 1
1473
+
1474
+ # Fix issue with GeneratorsSmallest for a transformation semigroup generated by
1475
+ # the identity
1476
+ gap> S := Semigroup(IdentityTransformation);;
1477
+ gap> GeneratorsSmallest(S);
1478
+ [ IdentityTransformation ]
1479
+
1480
+ # Fix issue with duplicate generators and ClosureSemigroup
1481
+ gap> gens := [Transformation([1, 2, 1]),
1482
+ > IdentityTransformation,
1483
+ > Transformation([1, 2, 4, 6, 6, 5]),
1484
+ > Transformation([2, 1, 3, 5, 5]),
1485
+ > Transformation([5, 4, 4, 2, 1]),
1486
+ > Transformation([5, 4, 6, 2, 1, 6]),
1487
+ > Transformation([6, 6, 3, 4, 5, 1])];;
1488
+ gap> S := Semigroup(gens[1], gens[1]);;
1489
+ gap> Size(S);
1490
+ 1
1491
+ gap> for x in gens do
1492
+ > S := ClosureSemigroup(S, x);
1493
+ > Size(S);
1494
+ > od;
1495
+ gap> Size(S);
1496
+ 119
1497
+ gap> Size(Semigroup(S));
1498
+ 119
1499
+
1500
+ # Test Issue #237 part 1
1501
+ gap> T := Semigroup([
1502
+ > Transformation([1, 2, 6, 4, 5, 6]),
1503
+ > Transformation([1, 2, 3, 4, 6, 6]),
1504
+ > Transformation([1, 2, 3, 6, 5, 6]),
1505
+ > Transformation([1, 6, 6, 4, 5, 6]),
1506
+ > Transformation([1, 6, 3, 4, 6, 6]),
1507
+ > Transformation([1, 6, 3, 6, 5, 6]),
1508
+ > Transformation([6, 2, 3, 6, 5, 6]),
1509
+ > Transformation([6, 2, 6, 4, 5, 6]),
1510
+ > Transformation([6, 2, 3, 4, 6, 6])]);;
1511
+ gap> x := Transformation([1, 6, 3, 6, 6, 6]);;
1512
+ gap> y := Transformation([6, 6, 3, 6, 6, 6]);;
1513
+ gap> IsIdempotent(x) and IsIdempotent(y) and x in T and y in T;
1514
+ true
1515
+ gap> I := IdempotentGeneratedSubsemigroup(T);;
1516
+ gap> IsGreensDGreaterThanFunc(I)(x, y);
1517
+ true
1518
+ gap> T := Semigroup(T);;
1519
+ gap> I := IdempotentGeneratedSubsemigroup(T);;
1520
+ gap> IsInverseSemigroup(I);
1521
+ true
1522
+ gap> IsGreensDGreaterThanFunc(I)(x, y);
1523
+ true
1524
+
1525
+ # Test Issue #237 part 2
1526
+ gap> T := Semigroup([
1527
+ > Transformation([1, 2, 6, 4, 5, 6]),
1528
+ > Transformation([1, 2, 3, 4, 6, 6]),
1529
+ > Transformation([1, 2, 3, 6, 5, 6]),
1530
+ > Transformation([1, 6, 6, 4, 5, 6]),
1531
+ > Transformation([1, 6, 3, 4, 6, 6]),
1532
+ > Transformation([1, 6, 3, 6, 5, 6]),
1533
+ > Transformation([6, 2, 3, 6, 5, 6]),
1534
+ > Transformation([6, 2, 6, 4, 5, 6]),
1535
+ > Transformation([6, 2, 3, 4, 6, 6])]);;
1536
+ gap> Set(PrimitiveIdempotents(T));
1537
+ [ Transformation( [ 1, 6, 6, 6, 6, 6 ] ),
1538
+ Transformation( [ 6, 2, 6, 6, 6, 6 ] ),
1539
+ Transformation( [ 6, 6, 3, 6, 6, 6 ] ),
1540
+ Transformation( [ 6, 6, 6, 4, 6, 6 ] ),
1541
+ Transformation( [ 6, 6, 6, 6, 5, 6 ] ) ]
1542
+
1543
+ # Issue 253: IsIdempotentGenerated
1544
+
1545
+ # Problem with IsIdempotentGenerated for ideals
1546
+ gap> S := Semigroup([Transformation([3, 2, 1]), Transformation([2, 2, 2])]);
1547
+ <transformation semigroup of degree 3 with 2 generators>
1548
+ gap> IsIdempotentGenerated(S);
1549
+ false
1550
+ gap> I := SemigroupIdeal(S, S.1 ^ 2);;
1551
+ gap> IsIdempotentGenerated(I);
1552
+ false
1553
+ gap> I = S;
1554
+ true
1555
+
1556
+ # Problem with IsIdempotentGenerated for Rees 0-matrix semigroups over
1557
+ # non-groups
1558
+ gap> mat := [[
1559
+ > Transformation([2, 3, 1]),
1560
+ > Transformation([2, 1]),
1561
+ > Transformation([1, 2, 1])]];;
1562
+ gap> R := ReesZeroMatrixSemigroup(FullTransformationMonoid(3), mat);
1563
+ <Rees 0-matrix semigroup 3x1 over <full transformation monoid of degree 3>>
1564
+ gap> IsIdempotentGenerated(R);
1565
+ false
1566
+
1567
+ # Issue #191: part 1 of semicong.tst (congruences on fp semigroups)
1568
+ gap> n := 3;;
1569
+ gap> f := FreeSemigroup(n);;
1570
+ gap> gns := GeneratorsOfSemigroup(f);;
1571
+ gap> rel := [];;
1572
+ gap> x := 0;;
1573
+ gap> for x in [1 .. Length(gns) - 1] do
1574
+ > Append(rel, List(gns, y -> [gns[x] * y, y * gns[x]]));
1575
+ > Add(rel, [gns[x] ^ (x + 1), gns[x]]);
1576
+ > Add(rel, [gns[x] * Last(gns), gns[x]]);
1577
+ > Add(rel, [Last(gns) * gns[x], gns[x]]);
1578
+ > od;
1579
+ gap> s := f / rel;;
1580
+ gap> sgns := GeneratorsOfSemigroup(s);;
1581
+ gap> c := SemigroupCongruenceByGeneratingPairs(s, [[sgns[1], sgns[2]]]);;
1582
+ gap> EquivalenceRelationPartition(c);
1583
+ [ [ s1, s2, s1*s2, s2^2, s1*s2^2 ] ]
1584
+ gap> ##
1585
+ gap> ## Check to see if elements are in the partition
1586
+ gap> ## true and false
1587
+ gap> ##
1588
+ gap> ec := EquivalenceClassOfElement(c, sgns[n]);;
1589
+ gap> Size(ec);
1590
+ 1
1591
+ gap> ec := EquivalenceClassOfElement(c, sgns[n - 1]);;
1592
+ gap> sgns[n] in ec;
1593
+ false
1594
+ gap> Size(ec);
1595
+ 5
1596
+
1597
+ # Infinite congruence classes: part 2 of semicong.tst (fp semigroups)
1598
+ gap> f := FreeSemigroup(2);;
1599
+ gap> s := f / [[f.1 ^ 3, f.1], [f.1 * f.2, f.1], [f.2 * f.1, f.1]];;
1600
+ gap> gns := GeneratorsOfSemigroup(s);;
1601
+ gap> c := SemigroupCongruenceByGeneratingPairs(s, [[gns[1], gns[1] ^ 2],
1602
+ > [gns[2], gns[2] ^ 2]]);;
1603
+ gap> ec := EquivalenceClassOfElement(c, gns[2]);;
1604
+ gap> gns[2] ^ 20 in ec;
1605
+ true
1606
+ gap> gns[2] ^ 40 in ec;
1607
+ true
1608
+ gap> ##
1609
+ gap> ## We should never get a full closure
1610
+ gap> ##
1611
+ gap> HasEquivalenceRelationPartition(c);
1612
+ false
1613
+
1614
+ # Issue 286: Bug in IsSynchronizingSemigroup
1615
+ gap> S := FullTransformationMonoid(10);
1616
+ <full transformation monoid of degree 10>
1617
+ gap> IsSynchronizingSemigroup(S);
1618
+ true
1619
+
1620
+ # Free semigroup congruence test from extreme/cong.tst
1621
+ gap> F := FreeSemigroup(1);;
1622
+ gap> x := GeneratorsOfSemigroup(F)[1];;
1623
+ gap> pair := [x ^ 2, x ^ 4];;
1624
+ gap> cong := SemigroupCongruence(F, pair);
1625
+ <2-sided semigroup congruence over <free semigroup on the generators
1626
+ [ s1 ]> with 1 generating pairs>
1627
+ gap> pair in cong;
1628
+ true
1629
+ gap> EquivalenceRelationLookup(cong);
1630
+ Error, the argument (a 2-sided congruence) must have finite range
1631
+ gap> EquivalenceClasses(cong);
1632
+ [ <2-sided congruence class of s1>, <2-sided congruence class of s1^2>,
1633
+ <2-sided congruence class of s1^3> ]
1634
+ gap> NrEquivalenceClasses(cong);
1635
+ 3
1636
+
1637
+ # Issue 300: problem with InverseOfSemigroupElement for an acting monoid
1638
+ gap> S := Monoid(Transformation([1, 2, 4, 4]),
1639
+ > Transformation([4, 2, 3, 4]),
1640
+ > Transformation([1, 4, 3, 4]));;
1641
+ gap> IsEUnitaryInverseSemigroup(S);
1642
+ true
1643
+
1644
+ # Issue 167: IsomorphismSemigroups, for an RMS where an arg is not WholeFamily
1645
+ gap> R := ReesMatrixSemigroup(Group(()), [[(), ()], [(), ()]]);;
1646
+ gap> W := Semigroup(RMSElement(R, 2, (), 2));;
1647
+ gap> S := ReesMatrixSemigroup(Group(()), [[()]]);;
1648
+ gap> IsReesMatrixSemigroup(W);
1649
+ true
1650
+ gap> IsomorphismSemigroups(S, S);
1651
+ ((), IdentityMapping( Group( [ () ] ) ), [ (), () ])
1652
+ gap> IsomorphismSemigroups(W, W) = IdentityMapping(W);
1653
+ true
1654
+ gap> IsomorphismSemigroups(W, S);
1655
+ CompositionMapping( ((), GroupHomomorphismByImages( Group( [ () ] ), Group(
1656
+ [ () ] ), [ ], [ ] ), [ (), () ]),
1657
+ <Rees matrix semigroup 1x1 over Group(())> ->
1658
+ <Rees matrix semigroup 1x1 over Group(())> )
1659
+
1660
+ # Issue 363: MultiplicativeNeutralElement, for an ideal
1661
+ gap> S := SingularFactorisableDualSymmetricInverseMonoid(3);
1662
+ <inverse bipartition semigroup ideal of degree 3 with 1 generator>
1663
+ gap> IsMonoidAsSemigroup(S);
1664
+ false
1665
+
1666
+ # Issue 377: IsInverseSemigroup
1667
+ gap> S := Semigroup([
1668
+ > Transformation([1, 1, 1, 2, 1, 5, 3]),
1669
+ > Transformation([1, 4, 4, 4, 6, 6, 6])],
1670
+ > rec(acting := false));;
1671
+ gap> IsInverseSemigroup(S);
1672
+ false
1673
+ gap> S := Semigroup([
1674
+ > PBR([[-1], [-1], [-3], [-1], [-3], [-3], [-2]],
1675
+ > [[1, 2, 4], [7], [3, 5, 6], [], [], [], []]),
1676
+ > PBR([[-1], [-2], [-3], [-4], [-5], [-5], [-4]],
1677
+ > [[1], [2], [3], [4, 7], [5, 6], [], []]),
1678
+ > PBR([[-1], [-2], [-3], [-6], [-6], [-6], [-6]],
1679
+ > [[1], [2], [3], [], [], [4, 5, 6, 7], []])]);;
1680
+ gap> IsInverseSemigroup(S);
1681
+ false
1682
+
1683
+ # Issue 371: GeneratorsOfSemigroup for a monoid
1684
+ gap> R := ReesMatrixSemigroup(Group(()), [[()]]);;
1685
+ gap> S := MonoidByAdjoiningIdentity(R);
1686
+ <commutative monoid with 1 generator>
1687
+ gap> GeneratorsOfSemigroup(S);
1688
+ [ ONE, (1,(),1) ]
1689
+ gap> Size(S);
1690
+ 2
1691
+ gap> Elements(S);
1692
+ [ ONE, (1,(),1) ]
1693
+
1694
+ # Issue 393: StructureDescription method in Semigroups inappropriately selected
1695
+ gap> F := FreeGroup("r", "s");;
1696
+ gap> r := F.1;;
1697
+ gap> s := F.2;;
1698
+ gap> G := F / [s * r * s ^ (- 1) * r ^ (- 1)];;
1699
+ gap> StructureDescription(G) in ["C0 x C0", "Z x Z"];
1700
+ true
1701
+
1702
+ # Issue 389: NaturalPartialOrder
1703
+ gap> S := Semigroup(SymmetricInverseMonoid(3), rec(acting := true));;
1704
+ gap> es := IdempotentGeneratedSubsemigroup(S);;
1705
+ gap> NaturalPartialOrder(es);
1706
+ [ [ ], [ 1 ], [ 1 ], [ 1, 2, 3 ], [ 1 ], [ 1, 3, 5 ], [ 1, 2, 5 ],
1707
+ [ 1, 2, 3, 4, 5, 6, 7 ] ]
1708
+ gap> es := AsSemigroup(IsBlockBijectionSemigroup, es);;
1709
+ gap> NaturalPartialOrder(es);
1710
+ [ [ ], [ 1 ], [ 1 ], [ 1 ], [ 1, 2, 3 ], [ 1, 2, 4 ], [ 1, 3, 4 ],
1711
+ [ 1, 2, 3, 4, 5, 6, 7 ] ]
1712
+
1713
+ # Issue 251
1714
+ gap> S := Monoid([
1715
+ > Transformation([2, 1]),
1716
+ > Transformation([3, 1, 2]),
1717
+ > Transformation([4, 2, 3, 4]),
1718
+ > Transformation([2, 2])]);;
1719
+ gap> slist := ShallowCopy(AsList(S));;
1720
+ gap> Sort(slist);
1721
+ gap> r := MultiplicativeNeutralElement(S);;
1722
+ gap> for s in S do
1723
+ > if not r * s in slist then
1724
+ > Print(s);
1725
+ > fi;
1726
+ > od;
1727
+
1728
+ # Issue 435 (inappropriate elements added during ClosureMonoid)
1729
+ gap> S := InverseMonoid(PartialPerm([1, 4], [1, 4]),
1730
+ > PartialPerm([1, 3, 4, 5], [1, 6, 4, 2]),
1731
+ > PartialPerm([1, 2, 4, 6], [1, 5, 4, 3]),
1732
+ > PartialPerm([1, 4], [4, 1]),
1733
+ > PartialPerm([1, 3, 4, 5], [1, 3, 4, 5]),
1734
+ > PartialPerm([1, 2, 4, 6], [1, 2, 4, 6]),
1735
+ > PartialPerm([1, 2, 3, 4, 5, 6, 7],
1736
+ > [1, 2, 3, 4, 5, 6, 7]));
1737
+ <inverse partial perm monoid of rank 7 with 7 generators>
1738
+ gap> I := IdempotentGeneratedSubsemigroup(S);
1739
+ <inverse partial perm monoid of rank 7 with 3 generators>
1740
+ gap> I = Semigroup(Idempotents(S));
1741
+ true
1742
+ gap> Size(I);
1743
+ 4
1744
+
1745
+ # Issue 459: IsTrivial method broken for semigroups with 0 generators
1746
+ gap> M0 := Magma(FamilyObj([1]), []);;
1747
+ gap> IsTrivial(M0);
1748
+ false
1749
+ gap> Size(M0);
1750
+ 0
1751
+
1752
+ # Issue 461: NrEquivalenceClasses gives incorrect answer
1753
+ gap> tab := [[1, 2, 3, 3], [2, 3, 1, 1], [3, 1, 2, 2], [3, 1, 2, 2]];;
1754
+ gap> S := SemigroupByMultiplicationTable(tab);;
1755
+ gap> cong := SemigroupCongruence(S, [[S.3, S.4]]);;
1756
+ gap> S.1 in EquivalenceClassOfElement(cong, S.3);
1757
+ false
1758
+ gap> NrEquivalenceClasses(cong);
1759
+ 3
1760
+ gap> S.1 in EquivalenceClassOfElement(cong, S.3);
1761
+ false
1762
+ gap> IsUniversalSemigroupCongruence(cong);
1763
+ false
1764
+
1765
+ # Issues 676-677
1766
+ gap> S := FreeBand(2);;
1767
+ gap> cong := SemigroupCongruence(S, []);;
1768
+ gap> NonTrivialEquivalenceClasses(cong);
1769
+ [ ]
1770
+
1771
+ # Issue 680
1772
+ gap> F := FreeSemigroup(2);;
1773
+ gap> s1 := F.1;; s2 := F.2;;
1774
+ gap> rels := [[s2 * s1 * s2, s2 * s1], [s1, s1], [s2, s2],
1775
+ > [s1 * s2, s1 * s2], [s2 * s1, s2 * s1]];;
1776
+ gap> cong := SemigroupCongruence(F, rels);
1777
+ <2-sided semigroup congruence over <free semigroup on the generators
1778
+ [ s1, s2 ]> with 1 generating pairs>
1779
+ gap> NrEquivalenceClasses(cong);
1780
+ infinity
1781
+ gap> EquivalenceRelationPartitionWithSingletons(cong);
1782
+ Error, the argument (a congruence) must have finite range
1783
+ gap> EquivalenceRelationLookup(cong);
1784
+ Error, the argument (a 2-sided congruence) must have finite range
1785
+
1786
+ # Issue 788
1787
+ gap> S := GLM(2, 2);
1788
+ <general linear monoid 2x2 over GF(2)>
1789
+ gap> Matrix(GF(4), One(S));
1790
+ [ [ Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0 ] ]
1791
+ gap> Size(Elements(S));
1792
+ 16
1793
+
1794
+ # Issue 764, InjectionPrincipalFactor can error for D-classes of semigroups of
1795
+ # matrices over finite fields
1796
+ gap> S := Semigroup(
1797
+ > [Matrix(GF(3),
1798
+ > [[Z(3), Z(3), Z(3) ^ 0],
1799
+ > [0 * Z(3), Z(3), Z(3)],
1800
+ > [Z(3), 0 * Z(3), Z(3) ^ 0]]),
1801
+ > Matrix(GF(3),
1802
+ > [[Z(3), Z(3), 0 * Z(3)],
1803
+ > [Z(3) ^ 0, Z(3) ^ 0, 0 * Z(3)],
1804
+ > [Z(3) ^ 0, Z(3) ^ 0, 0 * Z(3)]])]);;
1805
+ gap> InjectionPrincipalFactor(DClass(S, S.1));;
1806
+
1807
+ # Issue 800, Quotient semigroup elements are not associative
1808
+ gap> T := FullTransformationMonoid(2);;
1809
+ gap> cong := SemigroupCongruence(T, []);;
1810
+ gap> IsAssociativeElement(Elements(T / cong)[1]);
1811
+ true
1812
+
1813
+ #
1814
+ gap> SEMIGROUPS.StopTest();
1815
+ gap> STOP_TEST("Semigroups package: testinstall.tst");