passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

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

Potentially problematic release.


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

Files changed (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/x86_64-pc-linux-gnu-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1069 -0
  17. gap/pkg/semigroups/config.status +1133 -0
  18. gap/pkg/semigroups/config.sub +1960 -0
  19. gap/pkg/semigroups/configure +9742 -0
  20. gap/pkg/semigroups/configure.ac +71 -0
  21. gap/pkg/semigroups/data/doc/greens.pickle +1 -0
  22. gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
  23. gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
  24. gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
  25. gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
  26. gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
  27. gap/pkg/semigroups/data/tst/bipart4 +10 -0
  28. gap/pkg/semigroups/data/tst/pperm10 +1 -0
  29. gap/pkg/semigroups/data/tst/tables.gz +0 -0
  30. gap/pkg/semigroups/data/tst/testdata +1 -0
  31. gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
  32. gap/pkg/semigroups/data/tst/trans3 +7 -0
  33. gap/pkg/semigroups/data/tst/trans3-old +7 -0
  34. gap/pkg/semigroups/environment.yml +7 -0
  35. gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
  36. gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
  37. gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
  38. gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
  39. gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
  40. gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
  41. gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
  42. gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
  43. gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
  44. gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
  45. gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
  46. gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
  47. gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
  48. gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
  49. gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
  50. gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
  51. gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
  52. gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
  53. gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
  54. gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
  55. gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
  56. gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
  57. gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
  58. gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
  59. gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
  60. gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
  61. gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
  62. gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
  63. gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
  64. gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
  65. gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
  66. gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
  67. gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
  68. gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
  69. gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
  70. gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
  71. gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
  72. gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
  73. gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
  74. gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
  75. gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
  76. gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
  77. gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
  78. gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
  79. gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
  80. gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
  81. gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
  82. gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
  83. gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
  84. gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
  85. gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
  86. gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
  87. gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
  88. gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
  89. gap/pkg/semigroups/gap/elements/elements.gd +11 -0
  90. gap/pkg/semigroups/gap/elements/elements.gi +121 -0
  91. gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
  92. gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
  93. gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
  94. gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
  95. gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
  96. gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
  97. gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
  98. gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
  99. gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
  100. gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
  101. gap/pkg/semigroups/gap/elements/star.gd +21 -0
  102. gap/pkg/semigroups/gap/elements/star.gi +21 -0
  103. gap/pkg/semigroups/gap/elements/trans.gd +13 -0
  104. gap/pkg/semigroups/gap/elements/trans.gi +50 -0
  105. gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
  106. gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
  107. gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
  108. gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
  109. gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
  110. gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
  111. gap/pkg/semigroups/gap/fp/word.gd +15 -0
  112. gap/pkg/semigroups/gap/fp/word.gi +67 -0
  113. gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
  114. gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
  115. gap/pkg/semigroups/gap/greens/acting.gd +81 -0
  116. gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
  117. gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
  118. gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
  119. gap/pkg/semigroups/gap/greens/generic.gd +117 -0
  120. gap/pkg/semigroups/gap/greens/generic.gi +630 -0
  121. gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
  122. gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
  123. gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
  124. gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
  125. gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
  126. gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
  127. gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
  128. gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
  129. gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
  130. gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
  131. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
  132. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
  133. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
  134. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
  135. gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
  136. gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
  137. gap/pkg/semigroups/gap/main/acting.gd +36 -0
  138. gap/pkg/semigroups/gap/main/acting.gi +779 -0
  139. gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
  140. gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
  141. gap/pkg/semigroups/gap/main/graded.gd +26 -0
  142. gap/pkg/semigroups/gap/main/graded.gi +355 -0
  143. gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
  144. gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
  145. gap/pkg/semigroups/gap/main/orbits.gd +24 -0
  146. gap/pkg/semigroups/gap/main/orbits.gi +512 -0
  147. gap/pkg/semigroups/gap/main/semiact.gd +20 -0
  148. gap/pkg/semigroups/gap/main/semiact.gi +821 -0
  149. gap/pkg/semigroups/gap/main/setup.gd +61 -0
  150. gap/pkg/semigroups/gap/main/setup.gi +1094 -0
  151. gap/pkg/semigroups/gap/obsolete.gd +9 -0
  152. gap/pkg/semigroups/gap/obsolete.gi +14 -0
  153. gap/pkg/semigroups/gap/options.g +55 -0
  154. gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
  155. gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
  156. gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
  157. gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
  158. gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
  159. gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
  160. gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
  161. gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
  162. gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
  163. gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
  164. gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
  165. gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
  166. gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
  167. gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
  168. gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
  169. gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
  170. gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
  171. gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
  172. gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
  173. gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
  174. gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
  175. gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
  176. gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
  177. gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
  178. gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
  179. gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
  180. gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
  181. gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
  182. gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
  183. gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
  184. gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
  185. gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
  186. gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
  187. gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
  188. gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
  189. gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
  190. gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
  191. gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
  192. gap/pkg/semigroups/gap/tools/display.gd +24 -0
  193. gap/pkg/semigroups/gap/tools/display.gi +749 -0
  194. gap/pkg/semigroups/gap/tools/io.gd +17 -0
  195. gap/pkg/semigroups/gap/tools/io.gi +543 -0
  196. gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
  197. gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
  198. gap/pkg/semigroups/gap/tools/utils.gd +19 -0
  199. gap/pkg/semigroups/gap/tools/utils.gi +756 -0
  200. gap/pkg/semigroups/gapbind14/.ccls +18 -0
  201. gap/pkg/semigroups/gapbind14/.clang-format +104 -0
  202. gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
  203. gap/pkg/semigroups/gapbind14/LICENSE +674 -0
  204. gap/pkg/semigroups/gapbind14/README.md +76 -0
  205. gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
  206. gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
  207. gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
  208. gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
  209. gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
  210. gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
  211. gap/pkg/semigroups/gapbind14/demo/configure +34 -0
  212. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
  213. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
  214. gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
  215. gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
  216. gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
  217. gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
  218. gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
  219. gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
  220. gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
  221. gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
  222. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
  223. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
  224. gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
  225. gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
  226. gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
  227. gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
  228. gap/pkg/semigroups/init.g +150 -0
  229. gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
  230. gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
  231. gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
  232. gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
  233. gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
  234. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
  235. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
  236. gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
  237. gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
  238. gap/pkg/semigroups/m4/find_gap.m4 +94 -0
  239. gap/pkg/semigroups/makedoc.g +153 -0
  240. gap/pkg/semigroups/prerequisites.sh +62 -0
  241. gap/pkg/semigroups/read.g +105 -0
  242. gap/pkg/semigroups/release.toml +6 -0
  243. gap/pkg/semigroups/tst/extreme/README +2 -0
  244. gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
  245. gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
  246. gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
  247. gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
  248. gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
  249. gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
  250. gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
  251. gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
  252. gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
  253. gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
  254. gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
  255. gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
  256. gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
  257. gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
  258. gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
  259. gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
  260. gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
  261. gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
  262. gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
  263. gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
  264. gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
  265. gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
  266. gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
  267. gap/pkg/semigroups/tst/standard/README +2 -0
  268. gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
  269. gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
  270. gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
  271. gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
  272. gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
  273. gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
  274. gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
  275. gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
  276. gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
  277. gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
  278. gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
  279. gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
  280. gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
  281. gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
  282. gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
  283. gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
  284. gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
  285. gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
  286. gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
  287. gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
  288. gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
  289. gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
  290. gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
  291. gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
  292. gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
  293. gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
  294. gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
  295. gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
  296. gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
  297. gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
  298. gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
  299. gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
  300. gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
  301. gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
  302. gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
  303. gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
  304. gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
  305. gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
  306. gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
  307. gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
  308. gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
  309. gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
  310. gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
  311. gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
  312. gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
  313. gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
  314. gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
  315. gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
  316. gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
  317. gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
  318. gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
  319. gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
  320. gap/pkg/semigroups/tst/standard/options.tst +54 -0
  321. gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
  322. gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
  323. gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
  324. gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
  325. gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
  326. gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
  327. gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
  328. gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
  329. gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
  330. gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
  331. gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
  332. gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
  333. gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
  334. gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
  335. gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
  336. gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
  337. gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
  338. gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
  339. gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
  340. gap/pkg/semigroups/tst/testinstall.tst +1815 -0
  341. gap/pkg/semigroups/tst/teststandard.g +22 -0
  342. gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
  343. gap/pkg/semigroups/tst/workspaces/load.g +11 -0
  344. gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
  345. gap/pkg/semigroups/tst/workspaces/save.g +14 -0
  346. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA +93 -0
  347. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
  348. passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +354 -0
  349. passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +6 -0
  350. passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.libs/libsemigroups-6be12ad2.so.2.0.0 +0 -0
  352. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  353. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  354. sage/libs/gap_pkg_semigroups.abi3.so +0 -0
@@ -0,0 +1,2169 @@
1
+ #############################################################################
2
+ ##
3
+ #W standard/semigroups/semipperm.tst
4
+ #Y Copyright (C) 2011-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ #@local BruteForceInverseCheck, BruteForceIsoCheck, C, F, H1, H2, I, J, L, R, S
12
+ #@local T, V, acting, empty_map, en, f, f1, f2, g, h, inv, iso, map, rels, rho
13
+ #@local s, symmetric, x, y
14
+ gap> START_TEST("Semigroups package: standard/semigroups/semipperm.tst");
15
+ gap> LoadPackage("semigroups", false);;
16
+
17
+ #
18
+ gap> SEMIGROUPS.StartTest();
19
+
20
+ # SmallerDegreeTest5: SmallerDegreePartialPermRepresentation Issue 2:
21
+ # Example where the degree being returned was greater than the original degree
22
+ gap> f1 := PartialPerm([2, 1, 0, 0, 4]);;
23
+ gap> f2 := PartialPerm([1, 2, 3, 5]);;
24
+ gap> f := InverseSemigroup(f1, f2);;
25
+ gap> F := SmallerDegreePartialPermRepresentation(f);;
26
+ gap> NrMovedPoints(f);
27
+ 4
28
+ gap> NrMovedPoints(Image(F));
29
+ 4
30
+ gap> Size(f);
31
+ 15
32
+ gap> Size(Image(F));
33
+ 15
34
+
35
+ # SmallerDegreeTest6: SmallerDegreePartialPermRepresentation:
36
+ # Example where using SupermumIdempotents helps to give a better result
37
+ gap> f1 := PartialPermNC([2, 1, 4, 5, 3, 7, 6, 9, 10, 8]);;
38
+ gap> f2 := PartialPermNC([2, 1, 0, 0, 0, 7, 6]);;
39
+ gap> f := InverseSemigroup(f1, f2);;
40
+ gap> F := SmallerDegreePartialPermRepresentation(f);;
41
+ gap> NrMovedPoints(f);
42
+ 10
43
+ gap> NrMovedPoints(Image(F));
44
+ 5
45
+ gap> Size(f);
46
+ 8
47
+ gap> Size(Image(F));
48
+ 8
49
+
50
+ # SmallerDegreeTest7: SmallerDegreePartialPermRepresentation:
51
+ # Example where the degree is reduced but not the number of moved points
52
+ gap> f1 := PartialPermNC([1, 2, 3, 4, 5, 6, 10, 11, 15, 16, 17, 18],
53
+ > [7, 5, 11, 8, 4, 2, 20, 14, 12, 17, 9, 3]);;
54
+ gap> f2 := PartialPermNC([1, 2, 3, 6, 8, 10, 12, 15, 16, 17, 18, 19],
55
+ > [2, 4, 14, 3, 17, 7, 9, 16, 15, 10, 11, 1]);;
56
+ gap> f := InverseSemigroup(f1, f2);;
57
+ gap> F := SmallerDegreePartialPermRepresentation(f);;
58
+ gap> NrMovedPoints(f);
59
+ 19
60
+ gap> NrMovedPoints(Image(F));
61
+ 19
62
+ gap> ActionDegree(f);
63
+ 20
64
+ gap> ActionDegree(Image(F));
65
+ 19
66
+ gap> Size(f);
67
+ 2982
68
+ gap> Size(Image(F));
69
+ 2982
70
+
71
+ # SmallerDegreeTest8: SmallerDegreePartialPermRepresentation:
72
+ # Example made complicated by right regular representation of Sym(5).
73
+ gap> S := SymmetricGroup(5);
74
+ Sym( [ 1 .. 5 ] )
75
+ gap> rho := ActionHomomorphism(S, S);
76
+ <action homomorphism>
77
+ gap> T := Image(rho);
78
+ <permutation group with 2 generators>
79
+ gap> H1 := [];;
80
+ gap> H2 := [];;
81
+ gap> for x in Elements(T) do
82
+ > L := [];
83
+ > for y in [1 .. 120] do
84
+ > Add(L, y ^ x);
85
+ > od;
86
+ > g := PartialPerm(L);
87
+ > Add(H2, g);
88
+ > Add(L, 121);
89
+ > Add(L, 122);
90
+ > f := PartialPerm(L);
91
+ > Add(H1, f);
92
+ > od;
93
+ gap> J := [1 .. 120];;
94
+ gap> Add(J, 122);
95
+ gap> Add(J, 121);
96
+ gap> h := PartialPerm(J);
97
+ <partial perm on 122 pts with degree 122, codegree 122>
98
+ gap> V := InverseSemigroup(H1, H2, h);
99
+ <inverse partial perm monoid of rank 122 with 240 generators>
100
+ gap> iso := SmallerDegreePartialPermRepresentation(V);;
101
+ gap> ActionDegree(Range(iso)) <= 12; # Genuine minimum degree of V is 7.
102
+ true
103
+
104
+ # SemiPPermTest4: RepresentativeOfMinimalIdeal
105
+ gap> empty_map := PartialPerm([], []);;
106
+
107
+ ### Semigroups containing the empty partial perm
108
+
109
+ # S = {empty_map}
110
+ gap> s := Semigroup(empty_map);
111
+ <trivial partial perm group of rank 0 with 1 generator>
112
+ gap> RepresentativeOfMinimalIdeal(s) = empty_map;
113
+ true
114
+ gap> empty_map in s;
115
+ true
116
+
117
+ # S = 0-simple semigroup of order 2
118
+ gap> s := Semigroup(empty_map, PartialPerm([1], [1]));
119
+ <partial perm monoid of rank 1 with 2 generators>
120
+ gap> RepresentativeOfMinimalIdeal(s) = empty_map;
121
+ true
122
+ gap> empty_map in s;
123
+ true
124
+
125
+ # empty_map is a generator
126
+ gap> s := Semigroup(PartialPerm([1, 2, 3], [1, 3, 4]), empty_map);
127
+ <partial perm semigroup of rank 3 with 2 generators>
128
+ gap> RepresentativeOfMinimalIdeal(s) = empty_map;
129
+ true
130
+ gap> empty_map in s;
131
+ true
132
+
133
+ # Length(DomainOfPartialPermCollection) of size 1
134
+ gap> s := Semigroup(PartialPerm([2], [1]));
135
+ <commutative partial perm semigroup of rank 1 with 1 generator>
136
+ gap> RepresentativeOfMinimalIdeal(s) = empty_map;
137
+ true
138
+ gap> empty_map in s;
139
+ true
140
+
141
+ # Length(DomainOfPartialPermCollection) of size 1
142
+ gap> s := Semigroup(PartialPerm([2], [2]), PartialPerm([2], [3]));
143
+ <partial perm semigroup of rank 1 with 2 generators>
144
+ gap> RepresentativeOfMinimalIdeal(s) = empty_map;
145
+ true
146
+ gap> empty_map in s;
147
+ true
148
+
149
+ # Length(DomainOfPartialPermCollection) of size 1
150
+ gap> s := Semigroup(PartialPerm([2], [4]), PartialPerm([2], [3]));
151
+ <partial perm semigroup of rank 1 with 2 generators>
152
+ gap> RepresentativeOfMinimalIdeal(s) = empty_map;
153
+ true
154
+ gap> empty_map in s;
155
+ true
156
+
157
+ # Length(ImageOfPartialPermCollection) of size 1
158
+ gap> s := Semigroup(PartialPerm([2], [2]), PartialPerm([3], [2]));
159
+ <partial perm semigroup of rank 2 with 2 generators>
160
+ gap> RepresentativeOfMinimalIdeal(s) = empty_map;
161
+ true
162
+ gap> empty_map in s;
163
+ true
164
+
165
+ # Length(ImageOfPartialPermCollection) of size 1
166
+ gap> s := Semigroup(PartialPerm([4], [2]), PartialPerm([3], [2]));
167
+ <partial perm semigroup of rank 2 with 2 generators>
168
+ gap> RepresentativeOfMinimalIdeal(s) = empty_map;
169
+ true
170
+ gap> empty_map in s;
171
+ true
172
+
173
+ # Construction of graph reveals that empty_map in S
174
+ gap> s := Semigroup(PartialPerm([2, 0, 0, 4, 0]),
175
+ > PartialPerm([3, 0, 0, 0, 5]));
176
+ <partial perm semigroup of rank 3 with 2 generators>
177
+ gap> RepresentativeOfMinimalIdeal(s) = empty_map;
178
+ true
179
+ gap> empty_map in s;
180
+ true
181
+
182
+ # Rank 1 generator is not idempotent
183
+ gap> s := Semigroup(PartialPerm([3], [2]), PartialPerm([2], [1]));
184
+ <partial perm semigroup of rank 2 with 2 generators>
185
+ gap> RepresentativeOfMinimalIdeal(s) = empty_map;
186
+ true
187
+ gap> empty_map in s;
188
+ true
189
+
190
+ # Rank 1 generator is not idempotent
191
+ gap> s := Semigroup(PartialPerm([2], [1]), PartialPerm([3], [2]));
192
+ <partial perm semigroup of rank 2 with 2 generators>
193
+ gap> RepresentativeOfMinimalIdeal(s) = empty_map;
194
+ true
195
+ gap> empty_map in s;
196
+ true
197
+
198
+ # Analysis of graph reveals that empty_map in S (but not construction)
199
+ gap> s := Semigroup(PartialPerm([3, 2, 0]), PartialPerm([2, 3, 0]));
200
+ <partial perm semigroup of rank 2 with 2 generators>
201
+ gap> RepresentativeOfMinimalIdeal(s) = empty_map;
202
+ true
203
+ gap> empty_map in s;
204
+ true
205
+
206
+ ### Semigroups not containing the empty partial perm
207
+
208
+ # Semigroup with multiplicative zero = empty_map
209
+ gap> s := Semigroup(
210
+ > PartialPerm(
211
+ > [1, 2, 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17],
212
+ > [5, 7, 1, 3, 6, 9, 8, 15, 2, 18, 13, 20, 17, 4]),
213
+ > PartialPerm(
214
+ > [1, 2, 3, 4, 5, 6, 7, 9, 12, 13, 17, 18, 19, 20],
215
+ > [9, 2, 5, 12, 4, 11, 17, 8, 14, 13, 1, 18, 3, 16]),
216
+ > PartialPerm(
217
+ > [1, 2, 3, 4, 5, 6, 8, 10, 11, 13, 14, 15, 20],
218
+ > [14, 3, 12, 4, 18, 15, 5, 16, 8, 13, 10, 9, 20]));
219
+ <partial perm semigroup of rank 19 with 3 generators>
220
+ gap> RepresentativeOfMinimalIdeal(s);
221
+ <identity partial perm on [ 13 ]>
222
+ gap> last in s;
223
+ true
224
+ gap> empty_map in s;
225
+ false
226
+
227
+ # Trivial partial perm semigroup: GAP knows that it is simple at creation
228
+ gap> s := Semigroup(PartialPerm([2], [2]));
229
+ <trivial partial perm group of rank 1 with 1 generator>
230
+ gap> HasIsSimpleSemigroup(s);
231
+ true
232
+ gap> RepresentativeOfMinimalIdeal(s);
233
+ <identity partial perm on [ 2 ]>
234
+ gap> last in s;
235
+ true
236
+ gap> empty_map in s;
237
+ false
238
+
239
+ # Trivial partial perm semigroup: GAP does not know that it is simple
240
+ gap> s := Semigroup(PartialPerm([2], [2]), PartialPerm([2], [2]));
241
+ <trivial partial perm group of rank 1 with 1 generator>
242
+ gap> HasIsSimpleSemigroup(s);
243
+ true
244
+ gap> RepresentativeOfMinimalIdeal(s);
245
+ <identity partial perm on [ 2 ]>
246
+ gap> last in s;
247
+ true
248
+ gap> empty_map in s;
249
+ false
250
+
251
+ # Group as partial perm semigroup
252
+ gap> s := Semigroup(PartialPerm([2, 3], [3, 2]));
253
+ <commutative partial perm semigroup of rank 2 with 1 generator>
254
+ gap> HasIsGroupAsSemigroup(s);
255
+ false
256
+ gap> RepresentativeOfMinimalIdeal(s);
257
+ <identity partial perm on [ 2, 3 ]>
258
+ gap> IsGroupAsSemigroup(s);
259
+ true
260
+ gap> RepresentativeOfMinimalIdeal(s) in s;
261
+ true
262
+ gap> empty_map in s;
263
+ false
264
+
265
+ # helper functions
266
+ gap> BruteForceIsoCheck := function(iso)
267
+ > local x, y;
268
+ > if not IsInjective(iso) or not IsSurjective(iso) then
269
+ > return false;
270
+ > fi;
271
+ > for x in Generators(Source(iso)) do
272
+ > for y in Generators(Source(iso)) do
273
+ > if x ^ iso * y ^ iso <> (x * y) ^ iso then
274
+ > return false;
275
+ > fi;
276
+ > od;
277
+ > od;
278
+ > return true;
279
+ > end;;
280
+ gap> BruteForceInverseCheck := function(map)
281
+ > local inv;
282
+ > inv := InverseGeneralMapping(map);
283
+ > return ForAll(Source(map), x -> x = (x ^ map) ^ inv)
284
+ > and ForAll(Range(map), x -> x = (x ^ inv) ^ map);
285
+ > end;;
286
+
287
+ # AsSemigroup:
288
+ # convert from IsPBRSemigroup to IsPartialPermSemigroup
289
+ gap> S := Semigroup([
290
+ > PBR([[-2], [-2]], [[], [1, 2]])]);
291
+ <commutative pbr semigroup of degree 2 with 1 generator>
292
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
293
+ <trivial partial perm group of rank 1 with 1 generator>
294
+ gap> Size(S) = Size(T);
295
+ true
296
+ gap> NrDClasses(S) = NrDClasses(T);
297
+ true
298
+ gap> NrRClasses(S) = NrRClasses(T);
299
+ true
300
+ gap> NrLClasses(S) = NrLClasses(T);
301
+ true
302
+ gap> NrIdempotents(S) = NrIdempotents(T);
303
+ true
304
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
305
+ gap> BruteForceIsoCheck(map);
306
+ true
307
+ gap> BruteForceInverseCheck(map);
308
+ true
309
+
310
+ # AsSemigroup:
311
+ # convert from IsFpSemigroup to IsPartialPermSemigroup
312
+ gap> F := FreeSemigroup(2);; AssignGeneratorVariables(F);;
313
+ gap> rels := [[s1 ^ 2, s1],
314
+ > [s1 * s2, s2],
315
+ > [s2 * s1, s2],
316
+ > [s2 ^ 2, s2]];;
317
+ gap> S := F / rels;
318
+ <fp semigroup with 2 generators and 4 relations of length 14>
319
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
320
+ <inverse partial perm monoid of size 2, rank 2 with 2 generators>
321
+ gap> Size(S) = Size(T);
322
+ true
323
+ gap> NrDClasses(S) = NrDClasses(T);
324
+ true
325
+ gap> NrRClasses(S) = NrRClasses(T);
326
+ true
327
+ gap> NrLClasses(S) = NrLClasses(T);
328
+ true
329
+ gap> NrIdempotents(S) = NrIdempotents(T);
330
+ true
331
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
332
+ gap> BruteForceIsoCheck(map);
333
+ true
334
+ gap> BruteForceInverseCheck(map);
335
+ true
336
+
337
+ # AsSemigroup:
338
+ # convert from IsBipartitionSemigroup to IsPartialPermSemigroup
339
+ gap> S := InverseSemigroup([
340
+ > Bipartition([[1, -1]]),
341
+ > Bipartition([[1], [-1]])]);
342
+ <commutative inverse bipartition monoid of degree 1 with 1 generator>
343
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
344
+ <commutative inverse partial perm monoid of rank 1 with 2 generators>
345
+ gap> Size(S) = Size(T);
346
+ true
347
+ gap> NrDClasses(S) = NrDClasses(T);
348
+ true
349
+ gap> NrRClasses(S) = NrRClasses(T);
350
+ true
351
+ gap> NrLClasses(S) = NrLClasses(T);
352
+ true
353
+ gap> NrIdempotents(S) = NrIdempotents(T);
354
+ true
355
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
356
+ gap> BruteForceIsoCheck(map);
357
+ true
358
+ gap> BruteForceInverseCheck(map);
359
+ true
360
+
361
+ # AsSemigroup:
362
+ # convert from IsTransformationSemigroup to IsPartialPermSemigroup
363
+ gap> S := Semigroup([
364
+ > Transformation([2, 2])]);
365
+ <commutative transformation semigroup of degree 2 with 1 generator>
366
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
367
+ <trivial partial perm group of rank 1 with 1 generator>
368
+ gap> Size(S) = Size(T);
369
+ true
370
+ gap> NrDClasses(S) = NrDClasses(T);
371
+ true
372
+ gap> NrRClasses(S) = NrRClasses(T);
373
+ true
374
+ gap> NrLClasses(S) = NrLClasses(T);
375
+ true
376
+ gap> NrIdempotents(S) = NrIdempotents(T);
377
+ true
378
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
379
+ gap> BruteForceIsoCheck(map);
380
+ true
381
+ gap> BruteForceInverseCheck(map);
382
+ true
383
+
384
+ # AsSemigroup:
385
+ # convert from IsBooleanMatSemigroup to IsPartialPermSemigroup
386
+ gap> S := Semigroup([
387
+ > Matrix(IsBooleanMat,
388
+ > [[false, true], [false, true]])]);
389
+ <commutative semigroup of 2x2 boolean matrices with 1 generator>
390
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
391
+ <trivial partial perm group of rank 1 with 1 generator>
392
+ gap> Size(S) = Size(T);
393
+ true
394
+ gap> NrDClasses(S) = NrDClasses(T);
395
+ true
396
+ gap> NrRClasses(S) = NrRClasses(T);
397
+ true
398
+ gap> NrLClasses(S) = NrLClasses(T);
399
+ true
400
+ gap> NrIdempotents(S) = NrIdempotents(T);
401
+ true
402
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
403
+ gap> BruteForceIsoCheck(map);
404
+ true
405
+ gap> BruteForceInverseCheck(map);
406
+ true
407
+
408
+ # AsSemigroup:
409
+ # convert from IsMaxPlusMatrixSemigroup to IsPartialPermSemigroup
410
+ gap> S := Semigroup([
411
+ > Matrix(IsMaxPlusMatrix,
412
+ > [[-infinity, 0],
413
+ > [-infinity, 0]])]);
414
+ <commutative semigroup of 2x2 max-plus matrices with 1 generator>
415
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
416
+ <trivial partial perm group of rank 1 with 1 generator>
417
+ gap> Size(S) = Size(T);
418
+ true
419
+ gap> NrDClasses(S) = NrDClasses(T);
420
+ true
421
+ gap> NrRClasses(S) = NrRClasses(T);
422
+ true
423
+ gap> NrLClasses(S) = NrLClasses(T);
424
+ true
425
+ gap> NrIdempotents(S) = NrIdempotents(T);
426
+ true
427
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
428
+ gap> BruteForceIsoCheck(map);
429
+ true
430
+ gap> BruteForceInverseCheck(map);
431
+ true
432
+
433
+ # AsSemigroup:
434
+ # convert from IsMinPlusMatrixSemigroup to IsPartialPermSemigroup
435
+ gap> S := Semigroup([
436
+ > Matrix(IsMinPlusMatrix,
437
+ > [[infinity, 0],
438
+ > [infinity, 0]])]);
439
+ <commutative semigroup of 2x2 min-plus matrices with 1 generator>
440
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
441
+ <trivial partial perm group of rank 1 with 1 generator>
442
+ gap> Size(S) = Size(T);
443
+ true
444
+ gap> NrDClasses(S) = NrDClasses(T);
445
+ true
446
+ gap> NrRClasses(S) = NrRClasses(T);
447
+ true
448
+ gap> NrLClasses(S) = NrLClasses(T);
449
+ true
450
+ gap> NrIdempotents(S) = NrIdempotents(T);
451
+ true
452
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
453
+ gap> BruteForceIsoCheck(map);
454
+ true
455
+ gap> BruteForceInverseCheck(map);
456
+ true
457
+
458
+ # AsSemigroup:
459
+ # convert from IsProjectiveMaxPlusMatrixSemigroup to IsPartialPermSemigroup
460
+ gap> S := Semigroup([
461
+ > Matrix(IsProjectiveMaxPlusMatrix,
462
+ > [[-infinity, 0],
463
+ > [-infinity, 0]])]);
464
+ <commutative semigroup of 2x2 projective max-plus matrices with 1 generator>
465
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
466
+ <trivial partial perm group of rank 1 with 1 generator>
467
+ gap> Size(S) = Size(T);
468
+ true
469
+ gap> NrDClasses(S) = NrDClasses(T);
470
+ true
471
+ gap> NrRClasses(S) = NrRClasses(T);
472
+ true
473
+ gap> NrLClasses(S) = NrLClasses(T);
474
+ true
475
+ gap> NrIdempotents(S) = NrIdempotents(T);
476
+ true
477
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
478
+ gap> BruteForceIsoCheck(map);
479
+ true
480
+ gap> BruteForceInverseCheck(map);
481
+ true
482
+
483
+ # AsSemigroup:
484
+ # convert from IsIntegerMatrixSemigroup to IsPartialPermSemigroup
485
+ gap> S := Semigroup([
486
+ > Matrix(Integers,
487
+ > [[0, 1],
488
+ > [0, 1]])]);
489
+ <commutative semigroup of 2x2 integer matrices with 1 generator>
490
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
491
+ <trivial partial perm group of rank 1 with 1 generator>
492
+ gap> Size(S) = Size(T);
493
+ true
494
+ gap> NrDClasses(S) = NrDClasses(T);
495
+ true
496
+ gap> NrRClasses(S) = NrRClasses(T);
497
+ true
498
+ gap> NrLClasses(S) = NrLClasses(T);
499
+ true
500
+ gap> NrIdempotents(S) = NrIdempotents(T);
501
+ true
502
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
503
+ gap> BruteForceIsoCheck(map);
504
+ true
505
+ gap> BruteForceInverseCheck(map);
506
+ true
507
+
508
+ # AsSemigroup:
509
+ # convert from IsTropicalMaxPlusMatrixSemigroup to IsPartialPermSemigroup
510
+ gap> S := Semigroup([
511
+ > Matrix(IsTropicalMaxPlusMatrix,
512
+ > [[-infinity, 0],
513
+ > [-infinity, 0]], 4)]);
514
+ <commutative semigroup of 2x2 tropical max-plus matrices with 1 generator>
515
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
516
+ <trivial partial perm group of rank 1 with 1 generator>
517
+ gap> Size(S) = Size(T);
518
+ true
519
+ gap> NrDClasses(S) = NrDClasses(T);
520
+ true
521
+ gap> NrRClasses(S) = NrRClasses(T);
522
+ true
523
+ gap> NrLClasses(S) = NrLClasses(T);
524
+ true
525
+ gap> NrIdempotents(S) = NrIdempotents(T);
526
+ true
527
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
528
+ gap> BruteForceIsoCheck(map);
529
+ true
530
+ gap> BruteForceInverseCheck(map);
531
+ true
532
+
533
+ # AsSemigroup:
534
+ # convert from IsTropicalMinPlusMatrixSemigroup to IsPartialPermSemigroup
535
+ gap> S := Semigroup([
536
+ > Matrix(IsTropicalMinPlusMatrix,
537
+ > [[infinity, 0],
538
+ > [infinity, 0]], 1)]);
539
+ <commutative semigroup of 2x2 tropical min-plus matrices with 1 generator>
540
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
541
+ <trivial partial perm group of rank 1 with 1 generator>
542
+ gap> Size(S) = Size(T);
543
+ true
544
+ gap> NrDClasses(S) = NrDClasses(T);
545
+ true
546
+ gap> NrRClasses(S) = NrRClasses(T);
547
+ true
548
+ gap> NrLClasses(S) = NrLClasses(T);
549
+ true
550
+ gap> NrIdempotents(S) = NrIdempotents(T);
551
+ true
552
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
553
+ gap> BruteForceIsoCheck(map);
554
+ true
555
+ gap> BruteForceInverseCheck(map);
556
+ true
557
+
558
+ # AsSemigroup:
559
+ # convert from IsNTPMatrixSemigroup to IsPartialPermSemigroup
560
+ gap> S := Semigroup([
561
+ > Matrix(IsNTPMatrix,
562
+ > [[0, 1],
563
+ > [0, 1]], 2, 5)]);
564
+ <commutative semigroup of 2x2 ntp matrices with 1 generator>
565
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
566
+ <trivial partial perm group of rank 1 with 1 generator>
567
+ gap> Size(S) = Size(T);
568
+ true
569
+ gap> NrDClasses(S) = NrDClasses(T);
570
+ true
571
+ gap> NrRClasses(S) = NrRClasses(T);
572
+ true
573
+ gap> NrLClasses(S) = NrLClasses(T);
574
+ true
575
+ gap> NrIdempotents(S) = NrIdempotents(T);
576
+ true
577
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
578
+ gap> BruteForceIsoCheck(map);
579
+ true
580
+ gap> BruteForceInverseCheck(map);
581
+ true
582
+
583
+ # AsSemigroup:
584
+ # convert from IsPBRMonoid to IsPartialPermSemigroup
585
+ gap> S := Monoid([
586
+ > PBR([[-2], [-3], [-3]], [[], [1], [2, 3]]),
587
+ > PBR([[-3], [-1], [-3]], [[2], [], [1, 3]])]);
588
+ <pbr monoid of degree 3 with 2 generators>
589
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
590
+ <inverse partial perm monoid of size 6, rank 6 with 3 generators>
591
+ gap> Size(S) = Size(T);
592
+ true
593
+ gap> NrDClasses(S) = NrDClasses(T);
594
+ true
595
+ gap> NrRClasses(S) = NrRClasses(T);
596
+ true
597
+ gap> NrLClasses(S) = NrLClasses(T);
598
+ true
599
+ gap> NrIdempotents(S) = NrIdempotents(T);
600
+ true
601
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
602
+ gap> BruteForceIsoCheck(map);
603
+ true
604
+ gap> BruteForceInverseCheck(map);
605
+ true
606
+
607
+ # AsSemigroup:
608
+ # convert from IsFpMonoid to IsPartialPermSemigroup
609
+ gap> F := FreeMonoid(3);; AssignGeneratorVariables(F);;
610
+ gap> rels := [[m1 ^ 2, m1],
611
+ > [m1 * m2, m2],
612
+ > [m1 * m3, m3],
613
+ > [m2 * m1, m2],
614
+ > [m3 * m1, m3],
615
+ > [m3 ^ 2, m2 ^ 2],
616
+ > [m2 ^ 3, m2 ^ 2],
617
+ > [m2 ^ 2 * m3, m2 ^ 2],
618
+ > [m2 * m3 * m2, m2],
619
+ > [m3 * m2 ^ 2, m2 ^ 2],
620
+ > [m3 * m2 * m3, m3]];;
621
+ gap> S := F / rels;
622
+ <fp monoid with 3 generators and 11 relations of length 45>
623
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
624
+ <inverse partial perm monoid of size 7, rank 7 with 4 generators>
625
+ gap> Size(S) = Size(T);
626
+ true
627
+ gap> NrDClasses(S) = NrDClasses(T);
628
+ true
629
+ gap> NrRClasses(S) = NrRClasses(T);
630
+ true
631
+ gap> NrLClasses(S) = NrLClasses(T);
632
+ true
633
+ gap> NrIdempotents(S) = NrIdempotents(T);
634
+ true
635
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
636
+ gap> BruteForceIsoCheck(map);
637
+ true
638
+ gap> BruteForceInverseCheck(map);
639
+ true
640
+
641
+ # AsSemigroup:
642
+ # convert from IsBipartitionMonoid to IsPartialPermSemigroup
643
+ gap> S := InverseMonoid([
644
+ > Bipartition([[1, -2], [2], [-1]]),
645
+ > Bipartition([[1, -1], [2, -2]]),
646
+ > Bipartition([[1], [2, -1], [-2]])]);
647
+ <inverse bipartition monoid of degree 2 with 2 generators>
648
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
649
+ <inverse partial perm monoid of rank 2 with 2 generators>
650
+ gap> Size(S) = Size(T);
651
+ true
652
+ gap> NrDClasses(S) = NrDClasses(T);
653
+ true
654
+ gap> NrRClasses(S) = NrRClasses(T);
655
+ true
656
+ gap> NrLClasses(S) = NrLClasses(T);
657
+ true
658
+ gap> NrIdempotents(S) = NrIdempotents(T);
659
+ true
660
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
661
+ gap> BruteForceIsoCheck(map);
662
+ true
663
+ gap> BruteForceInverseCheck(map);
664
+ true
665
+
666
+ # AsSemigroup:
667
+ # convert from IsTransformationMonoid to IsPartialPermSemigroup
668
+ gap> S := Monoid([
669
+ > Transformation([2, 3, 3]), Transformation([3, 1, 3])]);
670
+ <transformation monoid of degree 3 with 2 generators>
671
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);;
672
+ gap> Size(S) = Size(T);
673
+ true
674
+ gap> NrDClasses(S) = NrDClasses(T);
675
+ true
676
+ gap> NrRClasses(S) = NrRClasses(T);
677
+ true
678
+ gap> NrLClasses(S) = NrLClasses(T);
679
+ true
680
+ gap> NrIdempotents(S) = NrIdempotents(T);
681
+ true
682
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
683
+ gap> BruteForceIsoCheck(map);
684
+ true
685
+ gap> BruteForceInverseCheck(map);
686
+ true
687
+
688
+ # AsSemigroup:
689
+ # convert from IsBooleanMatMonoid to IsPartialPermSemigroup
690
+ gap> S := Monoid([
691
+ > Matrix(IsBooleanMat,
692
+ > [[false, true, false],
693
+ > [false, false, true],
694
+ > [false, false, true]]),
695
+ > Matrix(IsBooleanMat,
696
+ > [[false, false, true],
697
+ > [true, false, false],
698
+ > [false, false, true]])]);
699
+ <monoid of 3x3 boolean matrices with 2 generators>
700
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
701
+ <inverse partial perm monoid of size 6, rank 6 with 3 generators>
702
+ gap> Size(S) = Size(T);
703
+ true
704
+ gap> NrDClasses(S) = NrDClasses(T);
705
+ true
706
+ gap> NrRClasses(S) = NrRClasses(T);
707
+ true
708
+ gap> NrLClasses(S) = NrLClasses(T);
709
+ true
710
+ gap> NrIdempotents(S) = NrIdempotents(T);
711
+ true
712
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
713
+ gap> BruteForceIsoCheck(map);
714
+ true
715
+ gap> BruteForceInverseCheck(map);
716
+ true
717
+
718
+ # AsSemigroup:
719
+ # convert from IsMaxPlusMatrixMonoid to IsPartialPermSemigroup
720
+ gap> S := Monoid([
721
+ > Matrix(IsMaxPlusMatrix,
722
+ > [[-infinity, 0, -infinity],
723
+ > [-infinity, -infinity, 0],
724
+ > [-infinity, -infinity, 0]]),
725
+ > Matrix(IsMaxPlusMatrix,
726
+ > [[-infinity, -infinity, 0],
727
+ > [0, -infinity, -infinity],
728
+ > [-infinity, -infinity, 0]])]);
729
+ <monoid of 3x3 max-plus matrices with 2 generators>
730
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
731
+ <inverse partial perm monoid of size 6, rank 6 with 3 generators>
732
+ gap> Size(S) = Size(T);
733
+ true
734
+ gap> NrDClasses(S) = NrDClasses(T);
735
+ true
736
+ gap> NrRClasses(S) = NrRClasses(T);
737
+ true
738
+ gap> NrLClasses(S) = NrLClasses(T);
739
+ true
740
+ gap> NrIdempotents(S) = NrIdempotents(T);
741
+ true
742
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
743
+ gap> BruteForceIsoCheck(map);
744
+ true
745
+ gap> BruteForceInverseCheck(map);
746
+ true
747
+
748
+ # AsSemigroup:
749
+ # convert from IsMinPlusMatrixMonoid to IsPartialPermSemigroup
750
+ gap> S := Monoid([
751
+ > Matrix(IsMinPlusMatrix,
752
+ > [[infinity, 0, infinity],
753
+ > [infinity, infinity, 0],
754
+ > [infinity, infinity, 0]]),
755
+ > Matrix(IsMinPlusMatrix,
756
+ > [[infinity, infinity, 0],
757
+ > [0, infinity, infinity],
758
+ > [infinity, infinity, 0]])]);
759
+ <monoid of 3x3 min-plus matrices with 2 generators>
760
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
761
+ <inverse partial perm monoid of size 6, rank 6 with 3 generators>
762
+ gap> Size(S) = Size(T);
763
+ true
764
+ gap> NrDClasses(S) = NrDClasses(T);
765
+ true
766
+ gap> NrRClasses(S) = NrRClasses(T);
767
+ true
768
+ gap> NrLClasses(S) = NrLClasses(T);
769
+ true
770
+ gap> NrIdempotents(S) = NrIdempotents(T);
771
+ true
772
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
773
+ gap> BruteForceIsoCheck(map);
774
+ true
775
+ gap> BruteForceInverseCheck(map);
776
+ true
777
+
778
+ # AsSemigroup:
779
+ # convert from IsProjectiveMaxPlusMatrixMonoid to IsPartialPermSemigroup
780
+ gap> S := Monoid([
781
+ > Matrix(IsProjectiveMaxPlusMatrix,
782
+ > [[-infinity, 0, -infinity],
783
+ > [-infinity, -infinity, 0],
784
+ > [-infinity, -infinity, 0]]),
785
+ > Matrix(IsProjectiveMaxPlusMatrix,
786
+ > [[-infinity, -infinity, 0],
787
+ > [0, -infinity, -infinity],
788
+ > [-infinity, -infinity, 0]])]);
789
+ <monoid of 3x3 projective max-plus matrices with 2 generators>
790
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
791
+ <inverse partial perm monoid of size 6, rank 6 with 3 generators>
792
+ gap> Size(S) = Size(T);
793
+ true
794
+ gap> NrDClasses(S) = NrDClasses(T);
795
+ true
796
+ gap> NrRClasses(S) = NrRClasses(T);
797
+ true
798
+ gap> NrLClasses(S) = NrLClasses(T);
799
+ true
800
+ gap> NrIdempotents(S) = NrIdempotents(T);
801
+ true
802
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
803
+ gap> BruteForceIsoCheck(map);
804
+ true
805
+ gap> BruteForceInverseCheck(map);
806
+ true
807
+
808
+ # AsSemigroup:
809
+ # convert from IsIntegerMatrixMonoid to IsPartialPermSemigroup
810
+ gap> S := Monoid([
811
+ > Matrix(Integers,
812
+ > [[0, 1, 0],
813
+ > [0, 0, 1],
814
+ > [0, 0, 1]]),
815
+ > Matrix(Integers,
816
+ > [[0, 0, 1],
817
+ > [1, 0, 0],
818
+ > [0, 0, 1]])]);
819
+ <monoid of 3x3 integer matrices with 2 generators>
820
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
821
+ <inverse partial perm monoid of size 6, rank 6 with 3 generators>
822
+ gap> Size(S) = Size(T);
823
+ true
824
+ gap> NrDClasses(S) = NrDClasses(T);
825
+ true
826
+ gap> NrRClasses(S) = NrRClasses(T);
827
+ true
828
+ gap> NrLClasses(S) = NrLClasses(T);
829
+ true
830
+ gap> NrIdempotents(S) = NrIdempotents(T);
831
+ true
832
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
833
+ gap> BruteForceIsoCheck(map);
834
+ true
835
+ gap> BruteForceInverseCheck(map);
836
+ true
837
+
838
+ # AsSemigroup:
839
+ # convert from IsTropicalMaxPlusMatrixMonoid to IsPartialPermSemigroup
840
+ gap> S := Monoid([
841
+ > Matrix(IsTropicalMaxPlusMatrix,
842
+ > [[-infinity, 0, -infinity],
843
+ > [-infinity, -infinity, 0],
844
+ > [-infinity, -infinity, 0]], 5),
845
+ > Matrix(IsTropicalMaxPlusMatrix,
846
+ > [[-infinity, -infinity, 0],
847
+ > [0, -infinity, -infinity],
848
+ > [-infinity, -infinity, 0]], 5)]);
849
+ <monoid of 3x3 tropical max-plus matrices with 2 generators>
850
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
851
+ <inverse partial perm monoid of size 6, rank 6 with 3 generators>
852
+ gap> Size(S) = Size(T);
853
+ true
854
+ gap> NrDClasses(S) = NrDClasses(T);
855
+ true
856
+ gap> NrRClasses(S) = NrRClasses(T);
857
+ true
858
+ gap> NrLClasses(S) = NrLClasses(T);
859
+ true
860
+ gap> NrIdempotents(S) = NrIdempotents(T);
861
+ true
862
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
863
+ gap> BruteForceIsoCheck(map);
864
+ true
865
+ gap> BruteForceInverseCheck(map);
866
+ true
867
+
868
+ # AsSemigroup:
869
+ # convert from IsTropicalMinPlusMatrixMonoid to IsPartialPermSemigroup
870
+ gap> S := Monoid([
871
+ > Matrix(IsTropicalMinPlusMatrix,
872
+ > [[infinity, 0, infinity],
873
+ > [infinity, infinity, 0],
874
+ > [infinity, infinity, 0]], 2),
875
+ > Matrix(IsTropicalMinPlusMatrix,
876
+ > [[infinity, infinity, 0],
877
+ > [0, infinity, infinity],
878
+ > [infinity, infinity, 0]], 2)]);
879
+ <monoid of 3x3 tropical min-plus matrices with 2 generators>
880
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
881
+ <inverse partial perm monoid of size 6, rank 6 with 3 generators>
882
+ gap> Size(S) = Size(T);
883
+ true
884
+ gap> NrDClasses(S) = NrDClasses(T);
885
+ true
886
+ gap> NrRClasses(S) = NrRClasses(T);
887
+ true
888
+ gap> NrLClasses(S) = NrLClasses(T);
889
+ true
890
+ gap> NrIdempotents(S) = NrIdempotents(T);
891
+ true
892
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
893
+ gap> BruteForceIsoCheck(map);
894
+ true
895
+ gap> BruteForceInverseCheck(map);
896
+ true
897
+
898
+ # AsSemigroup:
899
+ # convert from IsNTPMatrixMonoid to IsPartialPermSemigroup
900
+ gap> S := Monoid([
901
+ > Matrix(IsNTPMatrix,
902
+ > [[0, 1, 0],
903
+ > [0, 0, 1],
904
+ > [0, 0, 1]], 2, 4),
905
+ > Matrix(IsNTPMatrix,
906
+ > [[0, 0, 1],
907
+ > [1, 0, 0],
908
+ > [0, 0, 1]], 2, 4)]);
909
+ <monoid of 3x3 ntp matrices with 2 generators>
910
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
911
+ <inverse partial perm monoid of size 6, rank 6 with 3 generators>
912
+ gap> Size(S) = Size(T);
913
+ true
914
+ gap> NrDClasses(S) = NrDClasses(T);
915
+ true
916
+ gap> NrRClasses(S) = NrRClasses(T);
917
+ true
918
+ gap> NrLClasses(S) = NrLClasses(T);
919
+ true
920
+ gap> NrIdempotents(S) = NrIdempotents(T);
921
+ true
922
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
923
+ gap> BruteForceIsoCheck(map);
924
+ true
925
+ gap> BruteForceInverseCheck(map);
926
+ true
927
+
928
+ # AsMonoid:
929
+ # convert from IsPBRSemigroup to IsPartialPermMonoid
930
+ gap> S := Semigroup([
931
+ > PBR([[-2], [-1]], [[2], [1]])]);
932
+ <commutative pbr semigroup of degree 2 with 1 generator>
933
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
934
+ <commutative inverse partial perm monoid of size 2, rank 2 with 1 generator>
935
+ gap> Size(S) = Size(T);
936
+ true
937
+ gap> NrDClasses(S) = NrDClasses(T);
938
+ true
939
+ gap> NrRClasses(S) = NrRClasses(T);
940
+ true
941
+ gap> NrLClasses(S) = NrLClasses(T);
942
+ true
943
+ gap> NrIdempotents(S) = NrIdempotents(T);
944
+ true
945
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
946
+ gap> BruteForceIsoCheck(map);
947
+ true
948
+ gap> BruteForceInverseCheck(map);
949
+ true
950
+
951
+ # AsMonoid:
952
+ # convert from IsFpSemigroup to IsPartialPermMonoid
953
+ gap> F := FreeSemigroup(1);; AssignGeneratorVariables(F);;
954
+ gap> rels := [[s1 ^ 3, s1]];;
955
+ gap> S := F / rels;
956
+ <fp semigroup with 1 generator and 1 relation of length 5>
957
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
958
+ <commutative inverse partial perm monoid of size 2, rank 2 with 1 generator>
959
+ gap> Size(S) = Size(T);
960
+ true
961
+ gap> NrDClasses(S) = NrDClasses(T);
962
+ true
963
+ gap> NrRClasses(S) = NrRClasses(T);
964
+ true
965
+ gap> NrLClasses(S) = NrLClasses(T);
966
+ true
967
+ gap> NrIdempotents(S) = NrIdempotents(T);
968
+ true
969
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
970
+ gap> BruteForceIsoCheck(map);
971
+ true
972
+ gap> BruteForceInverseCheck(map);
973
+ true
974
+
975
+ # AsMonoid:
976
+ # convert from IsBipartitionSemigroup to IsPartialPermMonoid
977
+ gap> S := InverseSemigroup([
978
+ > Bipartition([[1, -2], [2, -1]])]);
979
+ <block bijection group of degree 2 with 1 generator>
980
+ gap> T := AsMonoid(IsPartialPermMonoid, S);;
981
+ gap> Size(S) = Size(T);
982
+ true
983
+ gap> NrDClasses(S) = NrDClasses(T);
984
+ true
985
+ gap> NrRClasses(S) = NrRClasses(T);
986
+ true
987
+ gap> NrLClasses(S) = NrLClasses(T);
988
+ true
989
+ gap> NrIdempotents(S) = NrIdempotents(T);
990
+ true
991
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
992
+ gap> BruteForceIsoCheck(map);
993
+ true
994
+ gap> BruteForceInverseCheck(map);
995
+ true
996
+
997
+ # AsMonoid:
998
+ # convert from IsBipartitionSemigroup to IsPartialPermMonoid
999
+ gap> S := Semigroup([
1000
+ > Bipartition([[1, -2], [2, -1]])]);
1001
+ <block bijection group of degree 2 with 1 generator>
1002
+ gap> T := AsMonoid(IsPartialPermMonoid, S);;
1003
+ gap> Size(S) = Size(T);
1004
+ true
1005
+ gap> NrDClasses(S) = NrDClasses(T);
1006
+ true
1007
+ gap> NrRClasses(S) = NrRClasses(T);
1008
+ true
1009
+ gap> NrLClasses(S) = NrLClasses(T);
1010
+ true
1011
+ gap> NrIdempotents(S) = NrIdempotents(T);
1012
+ true
1013
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1014
+ gap> BruteForceIsoCheck(map);
1015
+ true
1016
+ gap> BruteForceInverseCheck(map);
1017
+ true
1018
+
1019
+ # AsMonoid:
1020
+ # convert from IsTransformationSemigroup to IsPartialPermMonoid
1021
+ gap> S := Semigroup([
1022
+ > Transformation([2, 1])]);
1023
+ <commutative transformation semigroup of degree 2 with 1 generator>
1024
+ gap> T := AsMonoid(IsPartialPermMonoid, S);;
1025
+ gap> Size(S) = Size(T);
1026
+ true
1027
+ gap> NrDClasses(S) = NrDClasses(T);
1028
+ true
1029
+ gap> NrRClasses(S) = NrRClasses(T);
1030
+ true
1031
+ gap> NrLClasses(S) = NrLClasses(T);
1032
+ true
1033
+ gap> NrIdempotents(S) = NrIdempotents(T);
1034
+ true
1035
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1036
+ gap> BruteForceIsoCheck(map);
1037
+ true
1038
+ gap> BruteForceInverseCheck(map);
1039
+ true
1040
+
1041
+ # AsMonoid:
1042
+ # convert from IsBooleanMatSemigroup to IsPartialPermMonoid
1043
+ gap> S := Semigroup([
1044
+ > Matrix(IsBooleanMat,
1045
+ > [[false, true], [true, false]])]);
1046
+ <commutative semigroup of 2x2 boolean matrices with 1 generator>
1047
+ gap> T := AsMonoid(IsPartialPermMonoid, S);;
1048
+ gap> Size(S) = Size(T);
1049
+ true
1050
+ gap> NrDClasses(S) = NrDClasses(T);
1051
+ true
1052
+ gap> NrRClasses(S) = NrRClasses(T);
1053
+ true
1054
+ gap> NrLClasses(S) = NrLClasses(T);
1055
+ true
1056
+ gap> NrIdempotents(S) = NrIdempotents(T);
1057
+ true
1058
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1059
+ gap> BruteForceIsoCheck(map);
1060
+ true
1061
+ gap> BruteForceInverseCheck(map);
1062
+ true
1063
+
1064
+ # AsMonoid:
1065
+ # convert from IsMaxPlusMatrixSemigroup to IsPartialPermMonoid
1066
+ gap> S := Semigroup([
1067
+ > Matrix(IsMaxPlusMatrix,
1068
+ > [[-infinity, 0], [0, -infinity]])]);
1069
+ <commutative semigroup of 2x2 max-plus matrices with 1 generator>
1070
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1071
+ <commutative inverse partial perm monoid of size 2, rank 2 with 1 generator>
1072
+ gap> Size(S) = Size(T);
1073
+ true
1074
+ gap> NrDClasses(S) = NrDClasses(T);
1075
+ true
1076
+ gap> NrRClasses(S) = NrRClasses(T);
1077
+ true
1078
+ gap> NrLClasses(S) = NrLClasses(T);
1079
+ true
1080
+ gap> NrIdempotents(S) = NrIdempotents(T);
1081
+ true
1082
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1083
+ gap> BruteForceIsoCheck(map);
1084
+ true
1085
+ gap> BruteForceInverseCheck(map);
1086
+ true
1087
+
1088
+ # AsMonoid:
1089
+ # convert from IsMinPlusMatrixSemigroup to IsPartialPermMonoid
1090
+ gap> S := Semigroup([
1091
+ > Matrix(IsMinPlusMatrix,
1092
+ > [[infinity, 0], [0, infinity]])]);
1093
+ <commutative semigroup of 2x2 min-plus matrices with 1 generator>
1094
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1095
+ <commutative inverse partial perm monoid of size 2, rank 2 with 1 generator>
1096
+ gap> Size(S) = Size(T);
1097
+ true
1098
+ gap> NrDClasses(S) = NrDClasses(T);
1099
+ true
1100
+ gap> NrRClasses(S) = NrRClasses(T);
1101
+ true
1102
+ gap> NrLClasses(S) = NrLClasses(T);
1103
+ true
1104
+ gap> NrIdempotents(S) = NrIdempotents(T);
1105
+ true
1106
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1107
+ gap> BruteForceIsoCheck(map);
1108
+ true
1109
+ gap> BruteForceInverseCheck(map);
1110
+ true
1111
+
1112
+ # AsMonoid:
1113
+ # convert from IsProjectiveMaxPlusMatrixSemigroup to IsPartialPermMonoid
1114
+ gap> S := Semigroup([
1115
+ > Matrix(IsProjectiveMaxPlusMatrix,
1116
+ > [[-infinity, 0], [0, -infinity]])]);
1117
+ <commutative semigroup of 2x2 projective max-plus matrices with 1 generator>
1118
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1119
+ <commutative inverse partial perm monoid of size 2, rank 2 with 1 generator>
1120
+ gap> Size(S) = Size(T);
1121
+ true
1122
+ gap> NrDClasses(S) = NrDClasses(T);
1123
+ true
1124
+ gap> NrRClasses(S) = NrRClasses(T);
1125
+ true
1126
+ gap> NrLClasses(S) = NrLClasses(T);
1127
+ true
1128
+ gap> NrIdempotents(S) = NrIdempotents(T);
1129
+ true
1130
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1131
+ gap> BruteForceIsoCheck(map);
1132
+ true
1133
+ gap> BruteForceInverseCheck(map);
1134
+ true
1135
+
1136
+ # AsMonoid:
1137
+ # convert from IsIntegerMatrixSemigroup to IsPartialPermMonoid
1138
+ gap> S := Semigroup([
1139
+ > Matrix(Integers,
1140
+ > [[0, 1], [1, 0]])]);
1141
+ <commutative semigroup of 2x2 integer matrices with 1 generator>
1142
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1143
+ <commutative inverse partial perm monoid of size 2, rank 2 with 1 generator>
1144
+ gap> Size(S) = Size(T);
1145
+ true
1146
+ gap> NrDClasses(S) = NrDClasses(T);
1147
+ true
1148
+ gap> NrRClasses(S) = NrRClasses(T);
1149
+ true
1150
+ gap> NrLClasses(S) = NrLClasses(T);
1151
+ true
1152
+ gap> NrIdempotents(S) = NrIdempotents(T);
1153
+ true
1154
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1155
+ gap> BruteForceIsoCheck(map);
1156
+ true
1157
+ gap> BruteForceInverseCheck(map);
1158
+ true
1159
+
1160
+ # AsMonoid:
1161
+ # convert from IsTropicalMaxPlusMatrixSemigroup to IsPartialPermMonoid
1162
+ gap> S := Semigroup([
1163
+ > Matrix(IsTropicalMaxPlusMatrix,
1164
+ > [[-infinity, 0], [0, -infinity]], 5)]);
1165
+ <commutative semigroup of 2x2 tropical max-plus matrices with 1 generator>
1166
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1167
+ <commutative inverse partial perm monoid of size 2, rank 2 with 1 generator>
1168
+ gap> Size(S) = Size(T);
1169
+ true
1170
+ gap> NrDClasses(S) = NrDClasses(T);
1171
+ true
1172
+ gap> NrRClasses(S) = NrRClasses(T);
1173
+ true
1174
+ gap> NrLClasses(S) = NrLClasses(T);
1175
+ true
1176
+ gap> NrIdempotents(S) = NrIdempotents(T);
1177
+ true
1178
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1179
+ gap> BruteForceIsoCheck(map);
1180
+ true
1181
+ gap> BruteForceInverseCheck(map);
1182
+ true
1183
+
1184
+ # AsMonoid:
1185
+ # convert from IsTropicalMinPlusMatrixSemigroup to IsPartialPermMonoid
1186
+ gap> S := Semigroup([
1187
+ > Matrix(IsTropicalMinPlusMatrix,
1188
+ > [[infinity, 0], [0, infinity]], 3)]);
1189
+ <commutative semigroup of 2x2 tropical min-plus matrices with 1 generator>
1190
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1191
+ <commutative inverse partial perm monoid of size 2, rank 2 with 1 generator>
1192
+ gap> Size(S) = Size(T);
1193
+ true
1194
+ gap> NrDClasses(S) = NrDClasses(T);
1195
+ true
1196
+ gap> NrRClasses(S) = NrRClasses(T);
1197
+ true
1198
+ gap> NrLClasses(S) = NrLClasses(T);
1199
+ true
1200
+ gap> NrIdempotents(S) = NrIdempotents(T);
1201
+ true
1202
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1203
+ gap> BruteForceIsoCheck(map);
1204
+ true
1205
+ gap> BruteForceInverseCheck(map);
1206
+ true
1207
+
1208
+ # AsMonoid:
1209
+ # convert from IsNTPMatrixSemigroup to IsPartialPermMonoid
1210
+ gap> S := Semigroup([
1211
+ > Matrix(IsNTPMatrix,
1212
+ > [[0, 1], [1, 0]], 3, 2)]);
1213
+ <commutative semigroup of 2x2 ntp matrices with 1 generator>
1214
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1215
+ <commutative inverse partial perm monoid of size 2, rank 2 with 1 generator>
1216
+ gap> Size(S) = Size(T);
1217
+ true
1218
+ gap> NrDClasses(S) = NrDClasses(T);
1219
+ true
1220
+ gap> NrRClasses(S) = NrRClasses(T);
1221
+ true
1222
+ gap> NrLClasses(S) = NrLClasses(T);
1223
+ true
1224
+ gap> NrIdempotents(S) = NrIdempotents(T);
1225
+ true
1226
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1227
+ gap> BruteForceIsoCheck(map);
1228
+ true
1229
+ gap> BruteForceInverseCheck(map);
1230
+ true
1231
+
1232
+ # AsMonoid:
1233
+ # convert from IsPBRMonoid to IsPartialPermMonoid
1234
+ gap> S := Monoid([
1235
+ > PBR([[-1], [-4], [-3], [-4]], [[1], [], [3], [2, 4]]),
1236
+ > PBR([[-3], [-4], [-4], [-4]], [[], [], [1], [2, 3, 4]]),
1237
+ > PBR([[-4], [-4], [-1], [-4]], [[3], [], [], [1, 2, 4]])]);
1238
+ <pbr monoid of degree 4 with 3 generators>
1239
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1240
+ <inverse partial perm monoid of size 7, rank 7 with 4 generators>
1241
+ gap> Size(S) = Size(T);
1242
+ true
1243
+ gap> NrDClasses(S) = NrDClasses(T);
1244
+ true
1245
+ gap> NrRClasses(S) = NrRClasses(T);
1246
+ true
1247
+ gap> NrLClasses(S) = NrLClasses(T);
1248
+ true
1249
+ gap> NrIdempotents(S) = NrIdempotents(T);
1250
+ true
1251
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1252
+ gap> BruteForceIsoCheck(map);
1253
+ true
1254
+ gap> BruteForceInverseCheck(map);
1255
+ true
1256
+
1257
+ # AsMonoid:
1258
+ # convert from IsFpMonoid to IsPartialPermMonoid
1259
+ gap> F := FreeMonoid(2);; AssignGeneratorVariables(F);;
1260
+ gap> rels := [[m2 ^ 2, m1 ^ 2],
1261
+ > [m1 ^ 3, m1 ^ 2],
1262
+ > [m1 ^ 2 * m2, m1 ^ 2],
1263
+ > [m1 * m2 * m1, m1],
1264
+ > [m2 * m1 ^ 2, m1 ^ 2],
1265
+ > [m2 * m1 * m2, m2]];;
1266
+ gap> S := F / rels;
1267
+ <fp monoid with 2 generators and 6 relations of length 29>
1268
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1269
+ <inverse partial perm monoid of size 6, rank 6 with 3 generators>
1270
+ gap> Size(S) = Size(T);
1271
+ true
1272
+ gap> NrDClasses(S) = NrDClasses(T);
1273
+ true
1274
+ gap> NrRClasses(S) = NrRClasses(T);
1275
+ true
1276
+ gap> NrLClasses(S) = NrLClasses(T);
1277
+ true
1278
+ gap> NrIdempotents(S) = NrIdempotents(T);
1279
+ true
1280
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1281
+ gap> BruteForceIsoCheck(map);
1282
+ true
1283
+ gap> BruteForceInverseCheck(map);
1284
+ true
1285
+
1286
+ # AsMonoid:
1287
+ # convert from IsBipartitionMonoid to IsPartialPermMonoid
1288
+ gap> S := InverseMonoid([
1289
+ > Bipartition([[1, -3], [2], [3], [-1], [-2]]),
1290
+ > Bipartition([[1, -1], [2], [3, -3], [-2]]),
1291
+ > Bipartition([[1], [2], [3, -1], [-2], [-3]])]);
1292
+ <inverse bipartition monoid of degree 3 with 3 generators>
1293
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1294
+ <inverse partial perm monoid of size 7, rank 7 with 4 generators>
1295
+ gap> Size(S) = Size(T);
1296
+ true
1297
+ gap> NrDClasses(S) = NrDClasses(T);
1298
+ true
1299
+ gap> NrRClasses(S) = NrRClasses(T);
1300
+ true
1301
+ gap> NrLClasses(S) = NrLClasses(T);
1302
+ true
1303
+ gap> NrIdempotents(S) = NrIdempotents(T);
1304
+ true
1305
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1306
+ gap> BruteForceIsoCheck(map);
1307
+ true
1308
+ gap> BruteForceInverseCheck(map);
1309
+ true
1310
+
1311
+ # AsMonoid:
1312
+ # convert from IsTransformationMonoid to IsPartialPermMonoid
1313
+ gap> S := Monoid([
1314
+ > Transformation([1, 4, 3, 4]),
1315
+ > Transformation([3, 4, 4, 4]),
1316
+ > Transformation([4, 4, 1, 4])]);
1317
+ <transformation monoid of degree 4 with 3 generators>
1318
+ gap> T := AsMonoid(IsPartialPermMonoid, S);;
1319
+ gap> Size(S) = Size(T);
1320
+ true
1321
+ gap> NrDClasses(S) = NrDClasses(T);
1322
+ true
1323
+ gap> NrRClasses(S) = NrRClasses(T);
1324
+ true
1325
+ gap> NrLClasses(S) = NrLClasses(T);
1326
+ true
1327
+ gap> NrIdempotents(S) = NrIdempotents(T);
1328
+ true
1329
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1330
+ gap> BruteForceIsoCheck(map);
1331
+ true
1332
+ gap> BruteForceInverseCheck(map);
1333
+ true
1334
+
1335
+ # AsMonoid:
1336
+ # convert from IsBooleanMatMonoid to IsPartialPermMonoid
1337
+ gap> S := Monoid([
1338
+ > Matrix(IsBooleanMat,
1339
+ > [[true, false, false, false],
1340
+ > [false, false, false, true],
1341
+ > [false, false, true, false],
1342
+ > [false, false, false, true]]),
1343
+ > Matrix(IsBooleanMat,
1344
+ > [[false, false, true, false],
1345
+ > [false, false, false, true],
1346
+ > [false, false, false, true],
1347
+ > [false, false, false, true]]),
1348
+ > Matrix(IsBooleanMat,
1349
+ > [[false, false, false, true],
1350
+ > [false, false, false, true],
1351
+ > [true, false, false, false],
1352
+ > [false, false, false, true]])]);
1353
+ <monoid of 4x4 boolean matrices with 3 generators>
1354
+ gap> T := AsMonoid(IsPartialPermMonoid, S);;
1355
+ gap> RankOfPartialPermSemigroup(T);
1356
+ 4
1357
+ gap> Size(S) = Size(T);
1358
+ true
1359
+ gap> NrDClasses(S) = NrDClasses(T);
1360
+ true
1361
+ gap> NrRClasses(S) = NrRClasses(T);
1362
+ true
1363
+ gap> NrLClasses(S) = NrLClasses(T);
1364
+ true
1365
+ gap> NrIdempotents(S) = NrIdempotents(T);
1366
+ true
1367
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1368
+ gap> BruteForceIsoCheck(map);
1369
+ true
1370
+ gap> BruteForceInverseCheck(map);
1371
+ true
1372
+
1373
+ # AsMonoid:
1374
+ # convert from IsMaxPlusMatrixMonoid to IsPartialPermMonoid
1375
+ gap> S := Monoid([
1376
+ > Matrix(IsMaxPlusMatrix,
1377
+ > [[0, -infinity, -infinity, -infinity],
1378
+ > [-infinity, -infinity, -infinity, 0],
1379
+ > [-infinity, -infinity, 0, -infinity],
1380
+ > [-infinity, -infinity, -infinity, 0]]),
1381
+ > Matrix(IsMaxPlusMatrix,
1382
+ > [[-infinity, -infinity, 0, -infinity],
1383
+ > [-infinity, -infinity, -infinity, 0],
1384
+ > [-infinity, -infinity, -infinity, 0],
1385
+ > [-infinity, -infinity, -infinity, 0]]),
1386
+ > Matrix(IsMaxPlusMatrix,
1387
+ > [[-infinity, -infinity, -infinity, 0],
1388
+ > [-infinity, -infinity, -infinity, 0],
1389
+ > [0, -infinity, -infinity, -infinity],
1390
+ > [-infinity, -infinity, -infinity, 0]])]);
1391
+ <monoid of 4x4 max-plus matrices with 3 generators>
1392
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1393
+ <inverse partial perm monoid of size 7, rank 7 with 4 generators>
1394
+ gap> Size(S) = Size(T);
1395
+ true
1396
+ gap> NrDClasses(S) = NrDClasses(T);
1397
+ true
1398
+ gap> NrRClasses(S) = NrRClasses(T);
1399
+ true
1400
+ gap> NrLClasses(S) = NrLClasses(T);
1401
+ true
1402
+ gap> NrIdempotents(S) = NrIdempotents(T);
1403
+ true
1404
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1405
+ gap> BruteForceIsoCheck(map);
1406
+ true
1407
+ gap> BruteForceInverseCheck(map);
1408
+ true
1409
+
1410
+ # AsMonoid:
1411
+ # convert from IsMinPlusMatrixMonoid to IsPartialPermMonoid
1412
+ gap> S := Monoid([
1413
+ > Matrix(IsMinPlusMatrix,
1414
+ > [[0, infinity, infinity, infinity],
1415
+ > [infinity, infinity, infinity, 0],
1416
+ > [infinity, infinity, 0, infinity],
1417
+ > [infinity, infinity, infinity, 0]]),
1418
+ > Matrix(IsMinPlusMatrix,
1419
+ > [[infinity, infinity, 0, infinity],
1420
+ > [infinity, infinity, infinity, 0],
1421
+ > [infinity, infinity, infinity, 0],
1422
+ > [infinity, infinity, infinity, 0]]),
1423
+ > Matrix(IsMinPlusMatrix,
1424
+ > [[infinity, infinity, infinity, 0],
1425
+ > [infinity, infinity, infinity, 0],
1426
+ > [0, infinity, infinity, infinity],
1427
+ > [infinity, infinity, infinity, 0]])]);
1428
+ <monoid of 4x4 min-plus matrices with 3 generators>
1429
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1430
+ <inverse partial perm monoid of size 7, rank 7 with 4 generators>
1431
+ gap> Size(S) = Size(T);
1432
+ true
1433
+ gap> NrDClasses(S) = NrDClasses(T);
1434
+ true
1435
+ gap> NrRClasses(S) = NrRClasses(T);
1436
+ true
1437
+ gap> NrLClasses(S) = NrLClasses(T);
1438
+ true
1439
+ gap> NrIdempotents(S) = NrIdempotents(T);
1440
+ true
1441
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1442
+ gap> BruteForceIsoCheck(map);
1443
+ true
1444
+ gap> BruteForceInverseCheck(map);
1445
+ true
1446
+
1447
+ # AsMonoid:
1448
+ # convert from IsProjectiveMaxPlusMatrixMonoid to IsPartialPermMonoid
1449
+ gap> S := Monoid([
1450
+ > Matrix(IsProjectiveMaxPlusMatrix,
1451
+ > [[0, -infinity, -infinity, -infinity],
1452
+ > [-infinity, -infinity, -infinity, 0],
1453
+ > [-infinity, -infinity, 0, -infinity],
1454
+ > [-infinity, -infinity, -infinity, 0]]),
1455
+ > Matrix(IsProjectiveMaxPlusMatrix,
1456
+ > [[-infinity, -infinity, 0, -infinity],
1457
+ > [-infinity, -infinity, -infinity, 0],
1458
+ > [-infinity, -infinity, -infinity, 0],
1459
+ > [-infinity, -infinity, -infinity, 0]]),
1460
+ > Matrix(IsProjectiveMaxPlusMatrix,
1461
+ > [[-infinity, -infinity, -infinity, 0],
1462
+ > [-infinity, -infinity, -infinity, 0],
1463
+ > [0, -infinity, -infinity, -infinity],
1464
+ > [-infinity, -infinity, -infinity, 0]])]);
1465
+ <monoid of 4x4 projective max-plus matrices with 3 generators>
1466
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1467
+ <inverse partial perm monoid of size 7, rank 7 with 4 generators>
1468
+ gap> Size(S) = Size(T);
1469
+ true
1470
+ gap> NrDClasses(S) = NrDClasses(T);
1471
+ true
1472
+ gap> NrRClasses(S) = NrRClasses(T);
1473
+ true
1474
+ gap> NrLClasses(S) = NrLClasses(T);
1475
+ true
1476
+ gap> NrIdempotents(S) = NrIdempotents(T);
1477
+ true
1478
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1479
+ gap> BruteForceIsoCheck(map);
1480
+ true
1481
+ gap> BruteForceInverseCheck(map);
1482
+ true
1483
+
1484
+ # AsMonoid:
1485
+ # convert from IsIntegerMatrixMonoid to IsPartialPermMonoid
1486
+ gap> S := Monoid([
1487
+ > Matrix(Integers,
1488
+ > [[1, 0, 0, 0],
1489
+ > [0, 0, 0, 1],
1490
+ > [0, 0, 1, 0],
1491
+ > [0, 0, 0, 1]]),
1492
+ > Matrix(Integers,
1493
+ > [[0, 0, 1, 0],
1494
+ > [0, 0, 0, 1],
1495
+ > [0, 0, 0, 1],
1496
+ > [0, 0, 0, 1]]),
1497
+ > Matrix(Integers,
1498
+ > [[0, 0, 0, 1],
1499
+ > [0, 0, 0, 1],
1500
+ > [1, 0, 0, 0],
1501
+ > [0, 0, 0, 1]])]);
1502
+ <monoid of 4x4 integer matrices with 3 generators>
1503
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1504
+ <inverse partial perm monoid of size 7, rank 7 with 4 generators>
1505
+ gap> Size(S) = Size(T);
1506
+ true
1507
+ gap> NrDClasses(S) = NrDClasses(T);
1508
+ true
1509
+ gap> NrRClasses(S) = NrRClasses(T);
1510
+ true
1511
+ gap> NrLClasses(S) = NrLClasses(T);
1512
+ true
1513
+ gap> NrIdempotents(S) = NrIdempotents(T);
1514
+ true
1515
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1516
+ gap> BruteForceIsoCheck(map);
1517
+ true
1518
+ gap> BruteForceInverseCheck(map);
1519
+ true
1520
+
1521
+ # AsMonoid:
1522
+ # convert from IsTropicalMaxPlusMatrixMonoid to IsPartialPermMonoid
1523
+ gap> S := Monoid([
1524
+ > Matrix(IsTropicalMaxPlusMatrix,
1525
+ > [[0, -infinity, -infinity, -infinity],
1526
+ > [-infinity, -infinity, -infinity, 0],
1527
+ > [-infinity, -infinity, 0, -infinity],
1528
+ > [-infinity, -infinity, -infinity, 0]], 5),
1529
+ > Matrix(IsTropicalMaxPlusMatrix,
1530
+ > [[-infinity, -infinity, 0, -infinity],
1531
+ > [-infinity, -infinity, -infinity, 0],
1532
+ > [-infinity, -infinity, -infinity, 0],
1533
+ > [-infinity, -infinity, -infinity, 0]], 5),
1534
+ > Matrix(IsTropicalMaxPlusMatrix,
1535
+ > [[-infinity, -infinity, -infinity, 0],
1536
+ > [-infinity, -infinity, -infinity, 0],
1537
+ > [0, -infinity, -infinity, -infinity],
1538
+ > [-infinity, -infinity, -infinity, 0]], 5)]);
1539
+ <monoid of 4x4 tropical max-plus matrices with 3 generators>
1540
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1541
+ <inverse partial perm monoid of size 7, rank 7 with 4 generators>
1542
+ gap> Size(S) = Size(T);
1543
+ true
1544
+ gap> NrDClasses(S) = NrDClasses(T);
1545
+ true
1546
+ gap> NrRClasses(S) = NrRClasses(T);
1547
+ true
1548
+ gap> NrLClasses(S) = NrLClasses(T);
1549
+ true
1550
+ gap> NrIdempotents(S) = NrIdempotents(T);
1551
+ true
1552
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1553
+ gap> BruteForceIsoCheck(map);
1554
+ true
1555
+ gap> BruteForceInverseCheck(map);
1556
+ true
1557
+
1558
+ # AsMonoid:
1559
+ # convert from IsTropicalMinPlusMatrixMonoid to IsPartialPermMonoid
1560
+ gap> S := Monoid([
1561
+ > Matrix(IsTropicalMinPlusMatrix,
1562
+ > [[0, infinity, infinity, infinity],
1563
+ > [infinity, infinity, infinity, 0],
1564
+ > [infinity, infinity, 0, infinity],
1565
+ > [infinity, infinity, infinity, 0]], 3),
1566
+ > Matrix(IsTropicalMinPlusMatrix,
1567
+ > [[infinity, infinity, 0, infinity],
1568
+ > [infinity, infinity, infinity, 0],
1569
+ > [infinity, infinity, infinity, 0],
1570
+ > [infinity, infinity, infinity, 0]], 3),
1571
+ > Matrix(IsTropicalMinPlusMatrix,
1572
+ > [[infinity, infinity, infinity, 0],
1573
+ > [infinity, infinity, infinity, 0],
1574
+ > [0, infinity, infinity, infinity],
1575
+ > [infinity, infinity, infinity, 0]], 3)]);
1576
+ <monoid of 4x4 tropical min-plus matrices with 3 generators>
1577
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1578
+ <inverse partial perm monoid of size 7, rank 7 with 4 generators>
1579
+ gap> Size(S) = Size(T);
1580
+ true
1581
+ gap> NrDClasses(S) = NrDClasses(T);
1582
+ true
1583
+ gap> NrRClasses(S) = NrRClasses(T);
1584
+ true
1585
+ gap> NrLClasses(S) = NrLClasses(T);
1586
+ true
1587
+ gap> NrIdempotents(S) = NrIdempotents(T);
1588
+ true
1589
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1590
+ gap> BruteForceIsoCheck(map);
1591
+ true
1592
+ gap> BruteForceInverseCheck(map);
1593
+ true
1594
+
1595
+ # AsMonoid:
1596
+ # convert from IsNTPMatrixMonoid to IsPartialPermMonoid
1597
+ gap> S := Monoid([
1598
+ > Matrix(IsNTPMatrix,
1599
+ > [[1, 0, 0, 0],
1600
+ > [0, 0, 0, 1],
1601
+ > [0, 0, 1, 0],
1602
+ > [0, 0, 0, 1]], 1, 2),
1603
+ > Matrix(IsNTPMatrix,
1604
+ > [[0, 0, 1, 0],
1605
+ > [0, 0, 0, 1],
1606
+ > [0, 0, 0, 1],
1607
+ > [0, 0, 0, 1]], 1, 2),
1608
+ > Matrix(IsNTPMatrix,
1609
+ > [[0, 0, 0, 1],
1610
+ > [0, 0, 0, 1],
1611
+ > [1, 0, 0, 0],
1612
+ > [0, 0, 0, 1]], 1, 2)]);
1613
+ <monoid of 4x4 ntp matrices with 3 generators>
1614
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1615
+ <inverse partial perm monoid of size 7, rank 7 with 4 generators>
1616
+ gap> Size(S) = Size(T);
1617
+ true
1618
+ gap> NrDClasses(S) = NrDClasses(T);
1619
+ true
1620
+ gap> NrRClasses(S) = NrRClasses(T);
1621
+ true
1622
+ gap> NrLClasses(S) = NrLClasses(T);
1623
+ true
1624
+ gap> NrIdempotents(S) = NrIdempotents(T);
1625
+ true
1626
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1627
+ gap> BruteForceIsoCheck(map);
1628
+ true
1629
+ gap> BruteForceInverseCheck(map);
1630
+ true
1631
+
1632
+ # AsSemigroup:
1633
+ # convert from IsReesMatrixSemigroup to IsPartialPermSemigroup
1634
+ gap> R := ReesMatrixSemigroup(Group([(1, 2)]), [[()]]);
1635
+ <Rees matrix semigroup 1x1 over Group([ (1,2) ])>
1636
+ gap> T := AsSemigroup(IsPartialPermSemigroup, R);
1637
+ <partial perm group of size 2, rank 2 with 1 generator>
1638
+ gap> Size(R) = Size(T);
1639
+ true
1640
+ gap> NrDClasses(R) = NrDClasses(T);
1641
+ true
1642
+ gap> NrRClasses(R) = NrRClasses(T);
1643
+ true
1644
+ gap> NrLClasses(R) = NrLClasses(T);
1645
+ true
1646
+ gap> NrIdempotents(R) = NrIdempotents(T);
1647
+ true
1648
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, R);;
1649
+ gap> BruteForceIsoCheck(map);
1650
+ true
1651
+ gap> BruteForceInverseCheck(map);
1652
+ true
1653
+
1654
+ # AsMonoid
1655
+ # convert from IsReesMatrixSemigroup to IsPartialPermMonoid
1656
+ gap> R := ReesMatrixSemigroup(Group([(1, 2)]), [[(1, 2)]]);
1657
+ <Rees matrix semigroup 1x1 over Group([ (1,2) ])>
1658
+ gap> T := AsMonoid(IsPartialPermMonoid, R);
1659
+ <commutative inverse partial perm monoid of size 2, rank 2 with 1 generator>
1660
+ gap> Size(R) = Size(T);
1661
+ true
1662
+ gap> NrDClasses(R) = NrDClasses(T);
1663
+ true
1664
+ gap> NrRClasses(R) = NrRClasses(T);
1665
+ true
1666
+ gap> NrLClasses(R) = NrLClasses(T);
1667
+ true
1668
+ gap> NrIdempotents(R) = NrIdempotents(T);
1669
+ true
1670
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, R);;
1671
+ gap> BruteForceIsoCheck(map);
1672
+ true
1673
+ gap> BruteForceInverseCheck(map);
1674
+ true
1675
+
1676
+ # AsSemigroup:
1677
+ # convert from IsReesZeroMatrixSemigroup to IsPartialPermSemigroup
1678
+ gap> R := ReesZeroMatrixSemigroup(Group([(1, 2)]),
1679
+ > [[(1, 2)]]);
1680
+ <Rees 0-matrix semigroup 1x1 over Group([ (1,2) ])>
1681
+ gap> T := AsSemigroup(IsPartialPermSemigroup, R);
1682
+ <inverse partial perm semigroup of size 3, rank 3 with 2 generators>
1683
+ gap> Size(R) = Size(T);
1684
+ true
1685
+ gap> NrDClasses(R) = NrDClasses(T);
1686
+ true
1687
+ gap> NrRClasses(R) = NrRClasses(T);
1688
+ true
1689
+ gap> NrLClasses(R) = NrLClasses(T);
1690
+ true
1691
+ gap> NrIdempotents(R) = NrIdempotents(T);
1692
+ true
1693
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, R);;
1694
+ gap> BruteForceIsoCheck(map);
1695
+ true
1696
+ gap> BruteForceInverseCheck(map);
1697
+ true
1698
+
1699
+ # AsMonoid
1700
+ # convert from IsReesZeroMatrixSemigroup to IsPartialPermMonoid
1701
+ gap> R := ReesZeroMatrixSemigroup(Group([(1, 2)]), [[()]]);
1702
+ <Rees 0-matrix semigroup 1x1 over Group([ (1,2) ])>
1703
+ gap> T := AsMonoid(IsPartialPermMonoid, R);
1704
+ <inverse partial perm monoid of size 3, rank 3 with 2 generators>
1705
+ gap> Size(R) = Size(T);
1706
+ true
1707
+ gap> NrDClasses(R) = NrDClasses(T);
1708
+ true
1709
+ gap> NrRClasses(R) = NrRClasses(T);
1710
+ true
1711
+ gap> NrLClasses(R) = NrLClasses(T);
1712
+ true
1713
+ gap> NrIdempotents(R) = NrIdempotents(T);
1714
+ true
1715
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, R);;
1716
+ gap> BruteForceIsoCheck(map);
1717
+ true
1718
+ gap> BruteForceInverseCheck(map);
1719
+ true
1720
+
1721
+ # AsSemigroup:
1722
+ # convert from graph inverse to IsPartialPermSemigroup
1723
+ gap> S := GraphInverseSemigroup(Digraph([[2], []]));
1724
+ <finite graph inverse semigroup with 2 vertices, 1 edge>
1725
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
1726
+ <inverse partial perm semigroup of size 6, rank 6 with 4 generators>
1727
+ gap> Size(S) = Size(T);
1728
+ true
1729
+ gap> NrDClasses(S) = NrDClasses(T);
1730
+ true
1731
+ gap> NrRClasses(S) = NrRClasses(T);
1732
+ true
1733
+ gap> NrLClasses(S) = NrLClasses(T);
1734
+ true
1735
+ gap> NrIdempotents(S) = NrIdempotents(T);
1736
+ true
1737
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
1738
+ gap> BruteForceIsoCheck(map);
1739
+ true
1740
+ gap> BruteForceInverseCheck(map);
1741
+ true
1742
+
1743
+ # AsSemigroup:
1744
+ # convert from perm group to IsPartialPermSemigroup
1745
+ gap> S := DihedralGroup(IsPermGroup, 6);
1746
+ Group([ (1,2,3), (2,3) ])
1747
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
1748
+ <partial perm group of rank 3 with 2 generators>
1749
+ gap> Size(S) = Size(T);
1750
+ true
1751
+ gap> NrDClasses(S) = NrDClasses(T);
1752
+ true
1753
+ gap> NrRClasses(S) = NrRClasses(T);
1754
+ true
1755
+ gap> NrLClasses(S) = NrLClasses(T);
1756
+ true
1757
+ gap> NrIdempotents(S) = NrIdempotents(T);
1758
+ true
1759
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
1760
+ gap> BruteForceIsoCheck(map);
1761
+ true
1762
+ gap> BruteForceInverseCheck(map);
1763
+ true
1764
+
1765
+ # AsSemigroup:
1766
+ # convert from perm group to IsPartialPermMonoid
1767
+ gap> S := DihedralGroup(IsPermGroup, 6);
1768
+ Group([ (1,2,3), (2,3) ])
1769
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1770
+ <partial perm group of rank 3 with 2 generators>
1771
+ gap> Size(S) = Size(T);
1772
+ true
1773
+ gap> NrDClasses(S) = NrDClasses(T);
1774
+ true
1775
+ gap> NrRClasses(S) = NrRClasses(T);
1776
+ true
1777
+ gap> NrLClasses(S) = NrLClasses(T);
1778
+ true
1779
+ gap> NrIdempotents(S) = NrIdempotents(T);
1780
+ true
1781
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1782
+ gap> BruteForceIsoCheck(map);
1783
+ true
1784
+ gap> BruteForceInverseCheck(map);
1785
+ true
1786
+
1787
+ # AsSemigroup:
1788
+ # convert from non-perm group to IsPartialPermSemigroup
1789
+ gap> S := DihedralGroup(6);
1790
+ <pc group of size 6 with 2 generators>
1791
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);;
1792
+ gap> Size(S) = Size(T);
1793
+ true
1794
+ gap> NrDClasses(S) = NrDClasses(T);
1795
+ true
1796
+ gap> NrRClasses(S) = NrRClasses(T);
1797
+ true
1798
+ gap> NrLClasses(S) = NrLClasses(T);
1799
+ true
1800
+ gap> NrIdempotents(S) = NrIdempotents(T);
1801
+ true
1802
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
1803
+ gap> BruteForceIsoCheck(map);
1804
+ true
1805
+ gap> BruteForceInverseCheck(map);
1806
+ true
1807
+
1808
+ # AsSemigroup:
1809
+ # convert from non-perm group to IsPartialPermMonoid
1810
+ gap> S := DihedralGroup(6);
1811
+ <pc group of size 6 with 2 generators>
1812
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1813
+ <inverse partial perm monoid of size 6, rank 6 with 5 generators>
1814
+ gap> Size(S) = Size(T);
1815
+ true
1816
+ gap> NrDClasses(S) = NrDClasses(T);
1817
+ true
1818
+ gap> NrRClasses(S) = NrRClasses(T);
1819
+ true
1820
+ gap> NrLClasses(S) = NrLClasses(T);
1821
+ true
1822
+ gap> NrIdempotents(S) = NrIdempotents(T);
1823
+ true
1824
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1825
+ gap> BruteForceIsoCheck(map);
1826
+ true
1827
+ gap> BruteForceInverseCheck(map);
1828
+ true
1829
+
1830
+ # AsSemigroup:
1831
+ # convert from IsBlockBijectionSemigroup to IsPartialPermSemigroup
1832
+ gap> S := InverseSemigroup(Bipartition([[1, -1, -3], [2, 3, -2]]));;
1833
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
1834
+ <inverse partial perm semigroup of size 5, rank 5 with 2 generators>
1835
+ gap> IsInverseSemigroup(T);
1836
+ true
1837
+ gap> Size(S) = Size(T);
1838
+ true
1839
+ gap> NrDClasses(S) = NrDClasses(T);
1840
+ true
1841
+ gap> NrRClasses(S) = NrRClasses(T);
1842
+ true
1843
+ gap> NrLClasses(S) = NrLClasses(T);
1844
+ true
1845
+ gap> NrIdempotents(S) = NrIdempotents(T);
1846
+ true
1847
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
1848
+ gap> BruteForceIsoCheck(map);
1849
+ true
1850
+ gap> BruteForceInverseCheck(map);
1851
+ true
1852
+
1853
+ # AsSemigroup:
1854
+ # convert from IsBlockBijectionMonoid to IsPartialPermMonoid
1855
+ gap> S := InverseMonoid([
1856
+ > Bipartition([[1, -1, -3], [2, 3, -2]])]);;
1857
+ gap> T := AsMonoid(IsPartialPermMonoid, S);
1858
+ <inverse partial perm monoid of size 6, rank 6 with 3 generators>
1859
+ gap> IsInverseMonoid(T);
1860
+ true
1861
+ gap> Size(S) = Size(T);
1862
+ true
1863
+ gap> NrDClasses(S) = NrDClasses(T);
1864
+ true
1865
+ gap> NrRClasses(S) = NrRClasses(T);
1866
+ true
1867
+ gap> NrLClasses(S) = NrLClasses(T);
1868
+ true
1869
+ gap> NrIdempotents(S) = NrIdempotents(T);
1870
+ true
1871
+ gap> map := IsomorphismMonoid(IsPartialPermMonoid, S);;
1872
+ gap> BruteForceIsoCheck(map);
1873
+ true
1874
+ gap> BruteForceInverseCheck(map);
1875
+ true
1876
+
1877
+ # AsSemigroup:
1878
+ # convert from IsBlockBijectionMonoid to IsPartialPermSemigroup
1879
+ gap> S := InverseMonoid([
1880
+ > Bipartition([[1, -1, -3], [2, 3, -2]])]);;
1881
+ gap> T := AsSemigroup(IsPartialPermSemigroup, S);
1882
+ <inverse partial perm monoid of size 6, rank 6 with 3 generators>
1883
+ gap> IsInverseSemigroup(T) and IsMonoidAsSemigroup(T);
1884
+ true
1885
+ gap> Size(S) = Size(T);
1886
+ true
1887
+ gap> NrDClasses(S) = NrDClasses(T);
1888
+ true
1889
+ gap> NrRClasses(S) = NrRClasses(T);
1890
+ true
1891
+ gap> NrLClasses(S) = NrLClasses(T);
1892
+ true
1893
+ gap> NrIdempotents(S) = NrIdempotents(T);
1894
+ true
1895
+ gap> map := IsomorphismSemigroup(IsPartialPermSemigroup, S);;
1896
+ gap> BruteForceIsoCheck(map);
1897
+ true
1898
+ gap> BruteForceInverseCheck(map);
1899
+ true
1900
+
1901
+ # Test RandomSemigroup
1902
+ gap> RandomSemigroup(IsPartialPermSemigroup);;
1903
+ gap> RandomSemigroup(IsPartialPermSemigroup, 2);;
1904
+ gap> RandomSemigroup(IsPartialPermSemigroup, 2, 2);;
1905
+ gap> RandomInverseSemigroup(IsPartialPermSemigroup);;
1906
+ gap> RandomInverseSemigroup(IsPartialPermSemigroup, 2);;
1907
+ gap> RandomInverseSemigroup(IsPartialPermSemigroup, 2, 2);;
1908
+ gap> RandomMonoid(IsPartialPermMonoid);;
1909
+ gap> RandomMonoid(IsPartialPermMonoid, 2);;
1910
+ gap> RandomMonoid(IsPartialPermMonoid, 2, 2);;
1911
+ gap> RandomInverseMonoid(IsPartialPermMonoid);;
1912
+ gap> RandomInverseMonoid(IsPartialPermMonoid, 2);;
1913
+ gap> RandomInverseMonoid(IsPartialPermMonoid, 2, 2);;
1914
+
1915
+ # Test Idempotents, for partial perm semigroup and rank
1916
+ gap> S := Semigroup(SymmetricInverseMonoid(3));
1917
+ <partial perm monoid of rank 3 with 4 generators>
1918
+ gap> Idempotents(S, 0);
1919
+ [ <empty partial perm> ]
1920
+ gap> Set(Idempotents(S, 1));
1921
+ [ <identity partial perm on [ 1 ]>, <identity partial perm on [ 2 ]>,
1922
+ <identity partial perm on [ 3 ]> ]
1923
+ gap> Idempotents(S, 2);
1924
+ [ <identity partial perm on [ 1, 2 ]>, <identity partial perm on [ 2, 3 ]>,
1925
+ <identity partial perm on [ 1, 3 ]> ]
1926
+ gap> Idempotents(S, 3);
1927
+ [ <identity partial perm on [ 1, 2, 3 ]> ]
1928
+
1929
+ # Test Enumerator for symmetric inverse monoid
1930
+ gap> en := Enumerator(SymmetricInverseMonoid(3));
1931
+ <enumerator of <symmetric inverse monoid of degree 3>>
1932
+ gap> en[35];
1933
+ fail
1934
+ gap> Position(en, PartialPerm([1 .. 4]));
1935
+ fail
1936
+ gap> ForAll(en, x -> x = en[Position(en, x)]);
1937
+ true
1938
+ gap> ForAll([1 .. Length(en)], i -> i = Position(en, en[i]));
1939
+ true
1940
+
1941
+ # Test IsomorphismPartialPermSemigroup
1942
+ gap> S := Semigroup([
1943
+ > PartialPerm([1, 2], [1, 2]),
1944
+ > PartialPerm([1, 3], [2, 1]), PartialPerm([1, 2], [3, 2])]);
1945
+ <partial perm semigroup of rank 3 with 3 generators>
1946
+ gap> T := AsSemigroup(IsBipartitionSemigroup, S);;
1947
+ gap> IsomorphismPartialPermSemigroup(T);
1948
+ <bipartition semigroup of degree 3 with 3 generators> ->
1949
+ <partial perm semigroup of rank 3 with 3 generators>
1950
+ gap> I := SemigroupIdeal(T, T.1 * T.2 * T.3);;
1951
+ gap> IsomorphismPartialPermSemigroup(I);;
1952
+
1953
+ # semipperm: IsomorphismPartialPermSemigroup, for a group as semigroup, 1
1954
+ gap> S := DihedralGroup(8);
1955
+ <pc group of size 8 with 3 generators>
1956
+ gap> IsGroupAsSemigroup(S);
1957
+ true
1958
+ gap> map := IsomorphismPartialPermSemigroup(S);;
1959
+ gap> Source(map);
1960
+ <pc group of size 8 with 3 generators>
1961
+ gap> Size(Range(map));
1962
+ 8
1963
+ gap> BruteForceIsoCheck(map);
1964
+ true
1965
+ gap> BruteForceInverseCheck(map);
1966
+ true
1967
+
1968
+ # semipperm: IsomorphismPartialPermSemigroup, for a group as semigroup, 2
1969
+ gap> S := Semigroup([
1970
+ > PartialPerm([1, 2, 3, 4, 5], [2, 3, 4, 5, 1]),
1971
+ > PartialPerm([1, 2, 3, 4, 5], [2, 1, 3, 4, 5])]);;
1972
+ gap> IsGroupAsSemigroup(S);
1973
+ true
1974
+ gap> map := IsomorphismPartialPermSemigroup(S);;
1975
+ gap> Source(map) = Range(map);
1976
+ true
1977
+ gap> BruteForceIsoCheck(map);
1978
+ true
1979
+ gap> BruteForceInverseCheck(map);
1980
+ true
1981
+
1982
+ # semipperm: IsomorphismPartialPermSemigroup, for a zero group, 1
1983
+ gap> S := Range(InjectionZeroMagma(SymmetricGroup(5)));
1984
+ <Sym( [ 1 .. 5 ] ) with 0 adjoined>
1985
+ gap> map := IsomorphismPartialPermSemigroup(S);
1986
+ <Sym( [ 1 .. 5 ] ) with 0 adjoined> -> <inverse partial perm monoid of rank 5
1987
+ with 3 generators>
1988
+ gap> Range(map);
1989
+ <inverse partial perm monoid of rank 5 with 3 generators>
1990
+ gap> BruteForceIsoCheck(map);
1991
+ true
1992
+ gap> BruteForceInverseCheck(map);
1993
+ true
1994
+
1995
+ # semipperm: IsomorphismPartialPermSemigroup, for a zero group, 2
1996
+ gap> S := Range(InjectionZeroMagma(TrivialGroup(IsPcGroup)));
1997
+ <<pc group of size 1 with 0 generators> with 0 adjoined>
1998
+ gap> map := IsomorphismPartialPermSemigroup(S);;
1999
+ gap> Range(map);
2000
+ <symmetric inverse monoid of degree 1>
2001
+ gap> BruteForceIsoCheck(map);
2002
+ true
2003
+ gap> BruteForceInverseCheck(map);
2004
+ true
2005
+
2006
+ # semipperm: IsomorphismPartialPermSemigroup, for a zero group, 3
2007
+ gap> S := Range(InjectionZeroMagma(SL(2, 2)));
2008
+ <SL(2,2) with 0 adjoined>
2009
+ gap> map := IsomorphismPartialPermSemigroup(S);
2010
+ <SL(2,2) with 0 adjoined> -> <inverse partial perm monoid of rank 3 with 3
2011
+ generators>
2012
+ gap> Range(map);
2013
+ <inverse partial perm monoid of rank 3 with 3 generators>
2014
+ gap> BruteForceIsoCheck(map);
2015
+ true
2016
+ gap> BruteForceInverseCheck(map);
2017
+ true
2018
+
2019
+ # Test GroupOfUnits
2020
+ gap> S := SymmetricInverseMonoid(4);;
2021
+ gap> GroupOfUnits(S);
2022
+ <partial perm group of rank 4 with 2 generators>
2023
+ gap> GroupOfUnits(SemigroupIdeal(S, S.3));
2024
+ fail
2025
+
2026
+ # Test One for an ideal
2027
+ gap> S := SymmetricInverseMonoid(4);;
2028
+ gap> I := SemigroupIdeal(S, S.3);;
2029
+ gap> One(I);
2030
+ fail
2031
+ gap> I := SemigroupIdeal(S, S.1);;
2032
+ gap> One(I);
2033
+ <identity partial perm on [ 1, 2, 3, 4 ]>
2034
+ gap> S := SymmetricInverseMonoid(4);;
2035
+ gap> I := SemigroupIdeal(S, S.3);;
2036
+ gap> GeneratorsOfSemigroup(I);;
2037
+ gap> One(I);
2038
+ fail
2039
+ gap> I := SemigroupIdeal(S, S.1);;
2040
+ gap> GeneratorsOfSemigroup(I);;
2041
+ gap> One(I);
2042
+ <identity partial perm on [ 1, 2, 3, 4 ]>
2043
+
2044
+ # Test Codegree/degree/rank for an ideal
2045
+ gap> S := SymmetricInverseMonoid(4);;
2046
+ gap> I := SemigroupIdeal(S, S.3);;
2047
+ gap> CodegreeOfPartialPermSemigroup(I);
2048
+ 4
2049
+ gap> DegreeOfPartialPermSemigroup(I);
2050
+ 4
2051
+ gap> RankOfPartialPermSemigroup(I);
2052
+ 4
2053
+
2054
+ # Test ComponentRepsOfPartialPermSemigroup
2055
+ gap> S := Semigroup([
2056
+ > PartialPerm([1, 2, 3, 5, 6, 7, 8], [9, 6, 11, 2, 3, 10, 4]),
2057
+ > PartialPerm([1, 2, 3, 4, 5, 7, 10], [2, 6, 9, 3, 5, 10, 1]),
2058
+ > PartialPerm([1, 3, 4, 5, 6, 8], [8, 9, 1, 10, 6, 11]),
2059
+ > PartialPerm([1, 2, 3, 5, 6, 7, 8], [7, 3, 4, 5, 2, 11, 8]),
2060
+ > PartialPerm([1, 2, 3, 4, 5, 6, 7], [1, 10, 8, 6, 4, 9, 5])]);;
2061
+ gap> ComponentRepsOfPartialPermSemigroup(S);
2062
+ [ 1 ]
2063
+ gap> ComponentsOfPartialPermSemigroup(S);
2064
+ [ [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ] ]
2065
+ gap> I := SemigroupIdeal(S, S.5);;
2066
+ gap> ComponentRepsOfPartialPermSemigroup(I);
2067
+ [ 1 ]
2068
+ gap> CyclesOfPartialPermSemigroup(I);
2069
+ [ [ 1, 2, 6, 3, 4, 8, 10, 7, 5 ] ]
2070
+ gap> CyclesOfPartialPermSemigroup(S);
2071
+ [ [ 1, 2, 6, 3, 4, 8, 10, 7, 5 ] ]
2072
+
2073
+ # Test NaturalLeqInverseSemigroup
2074
+ gap> S := Semigroup([
2075
+ > PartialPerm([1, 2, 3, 5, 6, 7, 8], [9, 6, 11, 2, 3, 10, 4]),
2076
+ > PartialPerm([1, 2, 3, 4, 5, 7, 10], [2, 6, 9, 3, 5, 10, 1]),
2077
+ > PartialPerm([1, 3, 4, 5, 6, 8], [8, 9, 1, 10, 6, 11]),
2078
+ > PartialPerm([1, 2, 3, 5, 6, 7, 8], [7, 3, 4, 5, 2, 11, 8]),
2079
+ > PartialPerm([1, 2, 3, 4, 5, 6, 7], [1, 10, 8, 6, 4, 9, 5])]);;
2080
+ gap> NaturalLeqInverseSemigroup(S);
2081
+ Error, the argument is not an inverse semigroup
2082
+
2083
+ # Test SmallerDegreePartialPermRepresentation for CanUseFroidurePin
2084
+ # semigroup
2085
+ gap> S := Range(VagnerPrestonRepresentation(DualSymmetricInverseMonoid(3)));;
2086
+ gap> S := Semigroup(S, rec(acting := false));
2087
+ <partial perm monoid of rank 25 with 3 generators>
2088
+ gap> SmallerDegreePartialPermRepresentation(S);
2089
+ <inverse partial perm monoid of size 25, rank 25 with 3 generators> ->
2090
+ <inverse partial perm monoid of rank 6 with 3 generators>
2091
+
2092
+ # GeneratorsOfGroup
2093
+ gap> S := Group([], PartialPerm([1, 2]));;
2094
+ gap> GeneratorsOfGroup(S);
2095
+ [ ]
2096
+ gap> GeneratorsOfSemigroup(S);
2097
+ [ <identity partial perm on [ 1, 2 ]> ]
2098
+
2099
+ # Operator \<
2100
+ gap> S := Semigroup([
2101
+ > PartialPerm([1, 2, 3, 5, 6, 7, 8], [9, 6, 11, 2, 3, 10, 4]),
2102
+ > PartialPerm([1, 2, 3, 4, 5, 7, 10], [2, 6, 9, 3, 5, 10, 1]),
2103
+ > PartialPerm([1, 3, 4, 5, 6, 8], [8, 9, 1, 10, 6, 11]),
2104
+ > PartialPerm([1, 2, 3, 5, 6, 7, 8], [7, 3, 4, 5, 2, 11, 8]),
2105
+ > PartialPerm([1, 2, 3, 4, 5, 6, 7], [1, 10, 8, 6, 4, 9, 5])]);;
2106
+ gap> S < S;
2107
+ false
2108
+ gap> T := SymmetricInverseMonoid(4);;
2109
+ gap> T < S;
2110
+ true
2111
+ gap> T > S;
2112
+ false
2113
+ gap> T = S;
2114
+ false
2115
+ gap> T < T;
2116
+ false
2117
+
2118
+ # CodegreeOfPartialPermSemigroup
2119
+ gap> S := MinimalIdeal(SymmetricInverseMonoid(3));
2120
+ <partial perm group of rank 0>
2121
+ gap> CodegreeOfPartialPermSemigroup(S);
2122
+ 0
2123
+ gap> DegreeOfPartialPermSemigroup(S);
2124
+ 0
2125
+
2126
+ # DigraphOfActionOnPoints
2127
+ gap> S := SymmetricInverseMonoid(3);
2128
+ <symmetric inverse monoid of degree 3>
2129
+ gap> DigraphOfActionOnPoints(S, -1);
2130
+ Error, the 2nd argument (an integer) must be non-negative
2131
+ gap> DigraphOfActionOnPoints(S, 0);
2132
+ <immutable empty digraph with 0 vertices>
2133
+ gap> DigraphOfActionOnPoints(S);
2134
+ <immutable multidigraph with 3 vertices, 13 edges>
2135
+ gap> DigraphOfActionOnPoints(S, 3);
2136
+ <immutable multidigraph with 3 vertices, 13 edges>
2137
+
2138
+ # SmallerDegreePartialPermRepresentation for a non-partial perm semigroup
2139
+ gap> S := UniformBlockBijectionMonoid(4);
2140
+ <inverse block bijection monoid of degree 4 with 3 generators>
2141
+ gap> map := SmallerDegreePartialPermRepresentation(S);
2142
+ CompositionMapping( <inverse partial perm monoid of size 131, rank 131 with 3
2143
+ generators> -> <inverse partial perm monoid of rank 10 with 3 generators>,
2144
+ <inverse block bijection monoid of size 131, degree 4 with 3 generators> ->
2145
+ <inverse partial perm monoid of size 131, rank 131 with 3 generators> )
2146
+ gap> S.1 ^ map in Range(map);
2147
+ true
2148
+
2149
+ # Issue 817
2150
+ gap> S := DualSymmetricInverseMonoid(4);
2151
+ <inverse block bijection monoid of degree 4 with 3 generators>
2152
+ gap> C := SemigroupCongruence(S,
2153
+ > [Bipartition([[1, 2, 3, 4, -1, -2, -3, -4]]),
2154
+ > Bipartition([[1, -1], [2, -2], [3, -3], [4, -4]])]);
2155
+ <2-sided semigroup congruence over <inverse block bijection monoid
2156
+ of size 339, degree 4 with 3 generators> with 1 generating pairs>
2157
+ gap> map := SmallerDegreePartialPermRepresentation(Source(C));
2158
+ CompositionMapping( <inverse partial perm monoid of size 339, rank 339 with 3
2159
+ generators> -> <inverse partial perm monoid of rank 14 with 3 generators>,
2160
+ <inverse block bijection monoid of size 339, degree 4 with 3 generators> ->
2161
+ <inverse partial perm monoid of size 339, rank 339 with 3 generators> )
2162
+ gap> List(GeneratingPairsOfSemigroupCongruence(C), x -> OnTuples(x, map));
2163
+ [ [ <empty partial perm>,
2164
+ <identity partial perm on
2165
+ [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ]> ] ]
2166
+
2167
+ #
2168
+ gap> SEMIGROUPS.StopTest();
2169
+ gap> STOP_TEST("Semigroups package: standard/semigroups/semipperm.tst");