passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-musllinux_1_2_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 (356) 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-musl-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1068 -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 +356 -0
  349. passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +5 -0
  350. passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.libs/libgcc_s-0cd532bd.so.1 +0 -0
  352. passagemath_gap_pkg_semigroups.libs/libsemigroups-f0b7066b.so.2.0.0 +0 -0
  353. passagemath_gap_pkg_semigroups.libs/libstdc++-5d72f927.so.6.0.33 +0 -0
  354. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  355. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  356. sage/libs/gap_pkg_semigroups.abi3.so +0 -0
@@ -0,0 +1,1011 @@
1
+ #############################################################################
2
+ ##
3
+ #W standard/congruences/congpairs.tst
4
+ #Y Copyright (C) 2014-2022 Wilf A. Wilson
5
+ ## Michael Young
6
+ ##
7
+ ## Licensing information can be found in the README file of this package.
8
+ ##
9
+ #############################################################################
10
+ ##
11
+
12
+ #@local C, F, M, S, T, ccong, class, class1, class2, classes, cong, cong1
13
+ #@local cong2, cong3, enum, gens, lcong, pair, pair1, pair2, pairs, pairs1
14
+ #@local pairs2, part, part1, rels, sgens, u, v, x
15
+ gap> START_TEST("Semigroups package: standard/congruences/congpairs.tst");
16
+ gap> LoadPackage("semigroups", false);;
17
+
18
+ # Set info levels and user preferences
19
+ gap> SEMIGROUPS.StartTest();
20
+
21
+ # PairsCongTest2: Checking robustness against infinite semigroups
22
+ gap> S := FreeSemigroup(1);
23
+ <free semigroup on the generators [ s1 ]>
24
+ gap> x := GeneratorsOfSemigroup(S)[1];
25
+ s1
26
+ gap> gens := [x ^ 2, x ^ 4];
27
+ [ s1^2, s1^4 ]
28
+ gap> cong := SemigroupCongruence(S, gens);
29
+ <2-sided semigroup congruence over <free semigroup on the generators
30
+ [ s1 ]> with 1 generating pairs>
31
+
32
+ # The next test is now valid (but would run forever)
33
+ #gap> NonTrivialEquivalenceClasses(cong);
34
+ #Error, no method found! For debugging hints type ?Recovery from NoMethodFound
35
+ #Error, no 2nd choice method found for `NonTrivialEquivalenceClasses' on 1 argu\
36
+ #ments
37
+ gap> gens in cong;
38
+ true
39
+ gap> EquivalenceRelationLookup(cong);
40
+ Error, the argument (a 2-sided congruence) must have finite range
41
+ gap> NrEquivalenceClasses(cong);
42
+ 3
43
+ gap> class := EquivalenceClassOfElement(cong, x);;
44
+ gap> cong2 := SemigroupCongruence(S, [x ^ 2, x ^ 2]);;
45
+ gap> class := EquivalenceClassOfElement(cong2, x);;
46
+ gap> enum := Enumerator(class);
47
+ [ s1 ]
48
+ gap> Size(class);
49
+ 1
50
+ gap> x ^ 2 in class;
51
+ false
52
+ gap> ImagesElm(cong2, x ^ 5);
53
+ [ s1^5 ]
54
+
55
+ # PairsCongTest3: \= for two semigroup congruences
56
+ gap> gens := [Transformation([2, 6, 7, 2, 6, 9, 9, 1, 1, 5])];;
57
+ gap> S := Semigroup(Transformation([1]));;
58
+ gap> T := Monoid(gens);;
59
+ gap> u := UniversalSemigroupCongruence(S);
60
+ <universal semigroup congruence over <trivial transformation group of
61
+ degree 0 with 1 generator>>
62
+ gap> v := SemigroupCongruence(T, [gens[1], gens[1]]);;
63
+ gap> Size(GeneratingPairsOfSemigroupCongruence(v));
64
+ 0
65
+ gap> NrEquivalenceClasses(v);
66
+ 6
67
+ gap> Size(T);
68
+ 6
69
+ gap> u = v;
70
+ false
71
+ gap> u := UniversalSemigroupCongruence(T);
72
+ <universal semigroup congruence over <commutative non-regular transformation
73
+ monoid of size 6, degree 10 with 1 generator>>
74
+ gap> u = v;
75
+ false
76
+ gap> gens := List(T, x -> [gens[1], x]);;
77
+ gap> v := SemigroupCongruence(T, gens);
78
+ <2-sided semigroup congruence over <commutative non-regular transformation
79
+ monoid of size 6, degree 10 with 1 generator> with 5 generating pairs>
80
+ gap> u = v;
81
+ true
82
+ gap> NrEquivalenceClasses(u);
83
+ 1
84
+
85
+ # PairsCongTest4: \* for two semigroup congruence classes
86
+ gap> gens := [Transformation([2, 6, 7, 2, 6, 9, 9, 1, 1, 5])];;
87
+ gap> S := Semigroup(gens);;
88
+ gap> gens := List(S, x -> [gens[1], x]);;
89
+ gap> u := SemigroupCongruence(S, gens);; # universal congruence
90
+ gap> HasGeneratingPairsOfMagmaCongruence(u);
91
+ true
92
+ gap> Size(GeneratingPairsOfSemigroupCongruence(u));
93
+ 4
94
+ gap> u = UniversalSemigroupCongruence(S);
95
+ true
96
+ gap> v := SemigroupCongruence(S, [gens[1], gens[1]]);; # trivial congruence
97
+ gap> HasGeneratingPairsOfMagmaCongruence(v);
98
+ true
99
+ gap> Size(GeneratingPairsOfSemigroupCongruence(v));
100
+ 0
101
+ gap> classes := Set(EquivalenceClasses(v));
102
+ [ <2-sided congruence class of Transformation( [ 2, 6, 7, 2, 6, 9, 9, 1, 1,
103
+ 5 ] )>, <2-sided congruence class of Transformation( [ 6, 9, 9, 6, 9, 1,
104
+ 1, 2, 2, 6 ] )>, <2-sided congruence class of Transformation( [ 9, 1, 1,
105
+ 9, 1, 2, 2, 6, 6, 9 ] )>,
106
+ <2-sided congruence class of Transformation( [ 1, 2, 2, 1, 2, 6, 6, 9, 9,
107
+ 1 ] )>, <2-sided congruence class of Transformation( [ 2, 6, 6, 2, 6, 9,
108
+ 9, 1, 1, 2 ] )> ]
109
+ gap> EquivalenceClasses(u)[1] in classes;
110
+ false
111
+ gap> classes[1] * EquivalenceClasses(u)[1];
112
+ Error, the arguments (cong. classes) are not classes of the same congruence
113
+ gap> EquivalenceClasses(u)[1] * classes[1];
114
+ Error, the arguments (cong. classes) are not classes of the same congruence
115
+ gap> classes[3] * classes[4];
116
+ <2-sided congruence class of Transformation( [ 9, 1, 1, 9, 1, 2, 2, 6, 6,
117
+ 9 ] )>
118
+ gap> classes[4] * classes[3];
119
+ <2-sided congruence class of Transformation( [ 9, 1, 1, 9, 1, 2, 2, 6, 6,
120
+ 9 ] )>
121
+ gap> EquivalenceClassOfElement(v, Representative(classes[5] * classes[2])) =
122
+ > EquivalenceClassOfElement(v,
123
+ > Representative(classes[5]) *
124
+ > Representative(classes[2]));
125
+ true
126
+ gap> classes[3] = classes[3];
127
+ true
128
+ gap> classes[2] = classes[3];
129
+ false
130
+ gap> AsList(classes[4]);
131
+ [ Transformation( [ 1, 2, 2, 1, 2, 6, 6, 9, 9, 1 ] ) ]
132
+ gap> Size(classes[4]);
133
+ 1
134
+
135
+ # A semigroup congruence example
136
+ gap> S := Semigroup([Transformation([2, 1, 1, 2, 1]),
137
+ > Transformation([3, 4, 3, 4, 3]),
138
+ > Transformation([4, 3, 3, 4, 4]),
139
+ > Transformation([1, 3, 4, 1, 3])]);;
140
+ gap> pair1 := [Transformation([3, 4, 3, 4, 3]),
141
+ > Transformation([1, 2, 1, 2, 1])];;
142
+ gap> pair2 := [Transformation([4, 3, 4, 3, 4]),
143
+ > Transformation([3, 4, 3, 4, 3])];;
144
+ gap> cong := SemigroupCongruence(S, pair1, pair2);;
145
+ gap> Print(cong); Print("\n");
146
+ SemigroupCongruence( Semigroup( [ Transformation( [ 2, 1, 1, 2, 1 ] ),
147
+ Transformation( [ 3, 4, 3, 4, 3 ] ), Transformation( [ 4, 3, 3, 4, 4 ] ),
148
+ Transformation( [ 1, 3, 4, 1, 3 ] ) ] ),
149
+ [ [ Transformation( [ 3, 4, 3, 4, 3 ] ), Transformation( [ 1, 2, 1, 2, 1 ] ) ]
150
+ ,
151
+ [ Transformation( [ 4, 3, 4, 3, 4 ] ), Transformation( [ 3, 4, 3, 4, 3 ] )
152
+ ] ] )
153
+ gap> [Transformation([4, 4, 3, 4, 4]), Transformation([3, 3, 1, 3, 3])] in cong;
154
+ true
155
+ gap> [Transformation([4, 4, 3, 4, 4]), Transformation([3, 3, 1, 3, 3])] in cong;
156
+ true
157
+ gap> [Transformation([3, 4, 3, 3, 4]), Transformation([1, 3, 4, 1, 3])] in cong;
158
+ false
159
+ gap> [Transformation([3, 4, 3, 3, 4]), Transformation([1, 3, 4, 1, 3])] in cong;
160
+ false
161
+ gap> EquivalenceRelationCanonicalLookup(cong);
162
+ [ 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
163
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
164
+ gap> NonTrivialEquivalenceClasses(cong);
165
+ [ <2-sided congruence class of Transformation( [ 2, 1, 1, 2, 1 ] )> ]
166
+ gap> classes := EquivalenceClasses(cong);
167
+ [ <2-sided congruence class of Transformation( [ 2, 1, 1, 2, 1 ] )>,
168
+ <2-sided congruence class of Transformation( [ 1, 3, 4, 1, 3 ] )> ]
169
+ gap> ImagesElm(cong, Transformation([1, 3, 4, 1, 3]));
170
+ [ Transformation( [ 1, 3, 4, 1, 3 ] ) ]
171
+ gap> cong = JoinSemigroupCongruences(cong, cong);
172
+ true
173
+ gap> T := Semigroup([Transformation([2, 1, 1, 2, 1]),
174
+ > Transformation([3, 4, 3, 4, 3]),
175
+ > Transformation([4, 3, 3, 4, 4]),
176
+ > Transformation([2, 3, 2, 2, 3, 1]),
177
+ > Transformation([1, 3, 4, 1, 3])]);;
178
+ gap> cong2 := SemigroupCongruence(T, pair1, pair2);;
179
+ gap> EquivalenceClassOfElement(cong, Transformation([2, 3, 2, 2, 3, 1]));
180
+ Error, the 2nd argument (a mult. elt.) does not belong to the range of the 1st\
181
+ argument (a 2-sided congruence)
182
+ gap> JoinSemigroupCongruences(cong, cong2);
183
+ Error, cannot form the join of congruences over different semigroups
184
+ gap> IsSubrelation(cong, cong2);
185
+ false
186
+ gap> cong := LeftSemigroupCongruence(S, pair1, pair2);;
187
+ gap> IsSubrelation(cong2, cong);
188
+ false
189
+ gap> cong := RightSemigroupCongruence(S, pair1, pair2);;
190
+ gap> IsSubrelation(cong2, cong);
191
+ false
192
+
193
+ # A left semigroup congruence example that is also right
194
+ gap> S := Semigroup(Transformation([2, 1, 1, 2, 1]),
195
+ > Transformation([3, 4, 3, 4, 4]),
196
+ > Transformation([3, 4, 3, 4, 3]),
197
+ > Transformation([4, 3, 3, 4, 4]));;
198
+ gap> pair1 := [Transformation([3, 4, 3, 4, 3]),
199
+ > Transformation([1, 2, 1, 2, 1])];;
200
+ gap> pair2 := [Transformation([4, 3, 4, 3, 4]),
201
+ > Transformation([3, 4, 3, 4, 3])];;
202
+ gap> cong := LeftSemigroupCongruence(S, pair1, pair2);
203
+ <left semigroup congruence over <transformation semigroup of degree 5 with 4
204
+ generators> with 2 generating pairs>
205
+ gap> JoinLeftSemigroupCongruences(cong, cong) = cong;
206
+ true
207
+ gap> [Transformation([3, 4, 4, 3, 3]), Transformation([1, 2, 2, 1, 1])] in cong;
208
+ true
209
+ gap> [Transformation([3, 4, 4, 3, 3]), Transformation([1, 2, 2, 1, 1])] in cong;
210
+ true
211
+ gap> [Transformation([1, 2, 1, 2, 2]), Transformation([1, 2, 2, 1, 2])] in cong;
212
+ false
213
+ gap> EquivalenceRelationCanonicalLookup(cong);
214
+ [ 1, 2, 3, 4, 1, 1, 1, 2, 3, 4, 2, 2, 3, 3, 4, 4 ]
215
+ gap> NonTrivialEquivalenceClasses(cong);
216
+ [ <left congruence class of Transformation( [ 2, 1, 1, 2, 1 ] )>,
217
+ <left congruence class of Transformation( [ 3, 4, 3, 4, 4 ] )>,
218
+ <left congruence class of Transformation( [ 3, 4, 3, 4, 3 ] )>,
219
+ <left congruence class of Transformation( [ 4, 3, 3, 4, 4 ] )> ]
220
+ gap> EquivalenceClasses(cong);
221
+ [ <left congruence class of Transformation( [ 2, 1, 1, 2, 1 ] )>,
222
+ <left congruence class of Transformation( [ 3, 4, 3, 4, 4 ] )>,
223
+ <left congruence class of Transformation( [ 3, 4, 3, 4, 3 ] )>,
224
+ <left congruence class of Transformation( [ 4, 3, 3, 4, 4 ] )> ]
225
+ gap> IsRightSemigroupCongruence(cong);
226
+ true
227
+
228
+ # A left semigroup congruence example that is not right
229
+ gap> S := Semigroup([Transformation([1, 3, 4, 1, 3, 7, 5]),
230
+ > Transformation([5, 7, 1, 6, 1, 7, 6])]);;
231
+ gap> pair := [Transformation([1, 1, 1, 1, 1, 4, 1]),
232
+ > Transformation([1, 6, 5, 7, 5, 6, 7])];;
233
+ gap> cong := LeftSemigroupCongruence(S, pair);;
234
+ gap> Print(cong); Print("\n");
235
+ LeftSemigroupCongruence( Semigroup(
236
+ [ Transformation( [ 1, 3, 4, 1, 3, 7, 5 ] ),
237
+ Transformation( [ 5, 7, 1, 6, 1, 7, 6 ] ) ] ),
238
+ [
239
+ [ Transformation( [ 1, 1, 1, 1, 1, 4, 1 ] ),
240
+ Transformation( [ 1, 6, 5, 7, 5, 6, 7 ] ) ] ] )
241
+ gap> [Transformation([7, 1, 7, 7, 1, 5, 5]),
242
+ > Transformation([1, 7, 1, 1, 7, 1, 1])] in cong;
243
+ true
244
+ gap> IsSemigroupCongruence(cong);
245
+ false
246
+ gap> IsRightSemigroupCongruence(cong);
247
+ false
248
+
249
+ # A right semigroup congruence example that is left
250
+ gap> S := Semigroup([Transformation([2, 3, 5, 1, 4, 6, 1]),
251
+ > Transformation([2, 6, 4, 2, 6, 1, 2])]);;
252
+ gap> pairs := [[Transformation([6, 1, 2, 6, 1, 2, 6]),
253
+ > Transformation([5, 4, 1, 3, 2, 6, 3])],
254
+ > [Transformation([2, 3, 5, 1, 4, 6, 1]),
255
+ > Transformation([5, 6, 2, 5, 6, 3, 5])]];;
256
+ gap> cong := RightSemigroupCongruence(S, pairs);;
257
+ gap> JoinRightSemigroupCongruences(cong, cong) = cong;
258
+ true
259
+ gap> [Transformation([2, 6, 4, 2, 6, 1, 2]),
260
+ > Transformation([6, 2, 6, 5, 5, 3, 5])] in cong;
261
+ true
262
+ gap> IsSemigroupCongruence(cong);
263
+ true
264
+ gap> IsLeftSemigroupCongruence(cong);
265
+ true
266
+
267
+ # A right semigroup congruence example that is not left
268
+ gap> S := Semigroup(Transformation([2, 1, 1, 2, 1]),
269
+ > Transformation([3, 4, 3, 4, 4]),
270
+ > Transformation([3, 4, 3, 4, 3]),
271
+ > Transformation([4, 3, 3, 4, 4]));;
272
+ gap> pair1 := [Transformation([3, 4, 3, 4, 3]),
273
+ > Transformation([1, 2, 1, 2, 1])];;
274
+ gap> pair2 := [Transformation([4, 3, 4, 3, 4]),
275
+ > Transformation([3, 4, 3, 4, 3])];;
276
+ gap> cong := RightSemigroupCongruence(S, pair1, pair2);
277
+ <right semigroup congruence over <transformation semigroup of degree 5 with 4
278
+ generators> with 2 generating pairs>
279
+ gap> Print(cong); Print("\n");
280
+ RightSemigroupCongruence( Semigroup( [ Transformation( [ 2, 1, 1, 2, 1 ] ),
281
+ Transformation( [ 3, 4, 3, 4, 4 ] ), Transformation( [ 3, 4, 3, 4, 3 ] ),
282
+ Transformation( [ 4, 3, 3, 4, 4 ] ) ] ),
283
+ [ [ Transformation( [ 3, 4, 3, 4, 3 ] ), Transformation( [ 1, 2, 1, 2, 1 ] ) ]
284
+ ,
285
+ [ Transformation( [ 4, 3, 4, 3, 4 ] ), Transformation( [ 3, 4, 3, 4, 3 ] )
286
+ ] ] )
287
+ gap> [Transformation([3, 4, 3, 4, 3]), Transformation([1, 2, 1, 2, 1])] in cong;
288
+ true
289
+ gap> [Transformation([3, 4, 3, 4, 3]), Transformation([1, 2, 1, 2, 1])] in cong;
290
+ true
291
+ gap> [Transformation([3, 4, 4, 3, 3]), Transformation([1, 2, 2, 1, 1])] in cong;
292
+ false
293
+ gap> [Transformation([3, 4, 4, 3, 3]), Transformation([1, 2, 2, 1, 1])] in cong;
294
+ false
295
+ gap> EquivalenceRelationCanonicalLookup(cong);
296
+ [ 1, 2, 3, 4, 5, 6, 7, 8, 3, 9, 10, 11, 3, 3, 12, 13 ]
297
+ gap> NonTrivialEquivalenceClasses(cong);
298
+ [ <right congruence class of Transformation( [ 3, 4, 3, 4, 3 ] )> ]
299
+ gap> IsLeftSemigroupCongruence(cong);
300
+ false
301
+ gap> lcong := LeftSemigroupCongruence(S, pair1, pair2);;
302
+ gap> IsSubrelation(lcong, cong);
303
+ Error, no method found! For debugging hints type ?Recovery from NoMethodFound
304
+ Error, no 2nd choice method found for `IsSubrelation' on 2 arguments
305
+
306
+ # \in: Bad input
307
+ gap> S := Semigroup(Transformation([2, 1, 1, 2, 1]),
308
+ > Transformation([2, 4, 2, 3, 5]),
309
+ > Transformation([3, 4, 3, 4, 3]),
310
+ > Transformation([4, 3, 3, 4, 4]));;
311
+ gap> pair1 := [Transformation([3, 4, 3, 4, 3]),
312
+ > Transformation([1, 2, 1, 2, 1])];;
313
+ gap> cong := SemigroupCongruence(S, pair1);;
314
+ gap> [Transformation([2, 1, 1, 2, 1])] in cong;
315
+ Error, the 1st argument (a list) does not have length 2
316
+ gap> [Transformation([2, 1, 1, 2, 1]), Transformation([5, 2, 1, 2, 2])] in cong;
317
+ Error, the items in the 1st argument (a list) do not all belong to the range o\
318
+ f the 2nd argument (a 2-sided semigroup congruence)
319
+
320
+ # Classes
321
+ gap> S := Semigroup([
322
+ > Transformation([1, 5, 4, 2, 1]), Transformation([2, 1, 1, 1, 3])]);;
323
+ gap> pair := [Transformation([2, 2, 2, 3, 2]),
324
+ > Transformation([2, 2, 1, 1, 2])];;
325
+ gap> cong := SemigroupCongruence(S, pair);;
326
+ gap> class := EquivalenceClassOfElement(cong, Transformation([1, 2, 2, 2, 1]));;
327
+ gap> enum := Enumerator(class);;
328
+ gap> Transformation([1, 2, 2, 2, 1]) in enum;
329
+ true
330
+ gap> Transformation([2, 2, 3, 2, 2]) in enum;
331
+ true
332
+ gap> Transformation([1, 5, 4, 2, 1]) in enum;
333
+ false
334
+ gap> enum[3] in class;
335
+ true
336
+ gap> Transformation([1, 5, 4, 2, 1]) in class;
337
+ false
338
+ gap> Transformation([1, 2, 2, 2, 1]) in class;
339
+ true
340
+ gap> Transformation([2, 2, 3, 2, 2]) in class;
341
+ true
342
+ gap> enum[2000];
343
+ Error, List Element: <list>[2000] must have an assigned value
344
+ gap> cong := SemigroupCongruence(S, pair);;
345
+ gap> class := EquivalenceClassOfElement(cong, Transformation([1, 2, 2, 2, 1]));;
346
+ gap> enum := Enumerator(class);;
347
+ gap> x := enum[1];;
348
+ gap> EquivalenceRelationCanonicalLookup(cong);;
349
+ gap> Position(enum, Transformation([2, 2, 2, 2, 3]));
350
+ 25
351
+ gap> Position(enum, x);
352
+ 1
353
+ gap> cong := SemigroupCongruence(S, pair);;
354
+ gap> class := EquivalenceClassOfElement(cong, Transformation([1, 2, 2, 2, 1]));;
355
+ gap> Transformation([1, 1, 5, 1, 1]) in class;
356
+ true
357
+ gap> Transformation([6, 2, 3, 4, 1, 1]) in class;
358
+ false
359
+ gap> Size(class);
360
+ 89
361
+
362
+ # Test multithreading in TC
363
+ gap> S := DirectProduct(
364
+ > FullTransformationMonoid(6), Semigroup(Transformation([2, 1])));
365
+ <transformation monoid of degree 8 with 4 generators>
366
+ gap> pairs := [[Transformation([1, 1, 1, 1, 1, 1, 8, 7]), Transformation([1, 1,
367
+ > 1, 1, 1, 1])],
368
+ > [Transformation([1, 1, 1, 1, 1, 1]), Transformation([2, 2, 2, 2, 2, 2])],
369
+ > [Transformation([1, 1, 1, 1, 1, 1]), Transformation([3, 3, 3, 3, 3, 3])],
370
+ > [Transformation([1, 1, 1, 1, 1, 1]), Transformation([4, 4, 4, 4, 4, 4])],
371
+ > [Transformation([1, 1, 1, 1, 1, 1]), Transformation([5, 5, 5, 5, 5, 5])],
372
+ > [Transformation([1, 1, 1, 1, 1, 1]), Transformation([6, 6, 6, 6, 6, 6])],
373
+ > [Transformation([1, 1, 1, 1, 1, 1, 8, 7]), Transformation([1, 2, 3, 4, 5, 6,
374
+ > 8, 7])]];;
375
+ gap> cong2 := RightSemigroupCongruence(S, pairs);;
376
+ gap> NrEquivalenceClasses(cong2);
377
+ 1
378
+
379
+ # Test multithreading in TC
380
+ gap> S := DirectProduct(FullTransformationMonoid(6),
381
+ > Semigroup(Transformation([2, 1])));;
382
+ gap> pair1 := [Transformation([1, 2, 3, 4, 5, 6, 8, 7]),
383
+ > IdentityTransformation];;
384
+ gap> cong1 := RightSemigroupCongruence(S, pair1);;
385
+ gap> NrEquivalenceClasses(cong1);
386
+ 46656
387
+
388
+ # Test duplicate generators of semigroup
389
+ gap> S := Semigroup(Matrix(IsBooleanMat, [[0, 1], [1, 0]]),
390
+ > Matrix(IsBooleanMat, [[1, 0], [1, 1]]),
391
+ > Matrix(IsBooleanMat, [[1, 0], [0, 0]]),
392
+ > Matrix(IsBooleanMat, [[1, 0], [0, 0]]));;
393
+ gap> cong := LeftSemigroupCongruence(S, [S.1, S.2]);;
394
+ gap> NrEquivalenceClasses(cong);
395
+ 4
396
+ gap> cong := RightSemigroupCongruence(S, [S.1, S.2]);;
397
+ gap> NrEquivalenceClasses(cong);
398
+ 4
399
+ gap> cong := SemigroupCongruence(S, [S.1, S.2]);;
400
+ gap> NrEquivalenceClasses(cong);
401
+ 1
402
+ gap> S := Semigroup(Matrix(IsBooleanMat, [[0, 1], [1, 0]]),
403
+ > Matrix(IsBooleanMat, [[1, 0], [1, 1]]),
404
+ > Matrix(IsBooleanMat, [[1, 0], [0, 0]]));;
405
+ gap> cong := LeftSemigroupCongruence(S, [S.1, S.2]);;
406
+ gap> NrEquivalenceClasses(cong);
407
+ 4
408
+ gap> cong := RightSemigroupCongruence(S, [S.1, S.2]);;
409
+ gap> NrEquivalenceClasses(cong);
410
+ 4
411
+ gap> cong := SemigroupCongruence(S, [S.1, S.2]);;
412
+ gap> NrEquivalenceClasses(cong);
413
+ 1
414
+
415
+ # Test duplicate generators of semigroup as generating pairs
416
+ gap> S := Semigroup(Matrix(IsBooleanMat, [[0, 1], [1, 0]]),
417
+ > Matrix(IsBooleanMat, [[1, 0], [1, 1]]),
418
+ > Matrix(IsBooleanMat, [[1, 0], [0, 0]]),
419
+ > Matrix(IsBooleanMat, [[1, 0], [0, 0]]));;
420
+ gap> cong := LeftSemigroupCongruence(S, [S.3, S.4]);;
421
+ gap> NrEquivalenceClasses(cong);
422
+ 16
423
+ gap> cong := RightSemigroupCongruence(S, [S.3, S.4]);;
424
+ gap> NrEquivalenceClasses(cong);
425
+ 16
426
+ gap> cong := SemigroupCongruence(S, [S.3, S.4]);;
427
+ gap> NrEquivalenceClasses(cong);
428
+ 16
429
+
430
+ # JoinSemigroupCongruences
431
+ gap> S := PartitionMonoid(3);;
432
+ gap> pairs1 := [[Bipartition([[1, 2, 3, -1, -2, -3]]),
433
+ > Bipartition([[1, 2, -1, -2, -3], [3]])]];;
434
+ gap> pairs2 := [[Bipartition([[1, 2, 3, -1, -2, -3]]),
435
+ > Bipartition([[1, 2, 3, -1, -2], [-3]])],
436
+ > [Bipartition([[1, 2, -1, -2], [3, -3]]),
437
+ > Bipartition([[1, 2, -3], [3, -1, -2]])]];;
438
+ gap> cong1 := SemigroupCongruence(S, pairs1);;
439
+ gap> cong2 := SemigroupCongruence(S, pairs2);;
440
+ gap> cong3 := JoinSemigroupCongruences(cong1, cong2);
441
+ <2-sided semigroup congruence over <regular bipartition *-monoid of size 203,
442
+ degree 3 with 4 generators> with 3 generating pairs>
443
+ gap> pairs1[1] in cong3;
444
+ true
445
+ gap> pairs2[1] in cong3;
446
+ true
447
+ gap> pairs2[2] in cong3;
448
+ true
449
+ gap> IsSubrelation(cong3, cong1) and IsSubrelation(cong3, cong2);
450
+ true
451
+ gap> IsSubrelation(cong2, cong1);
452
+ false
453
+
454
+ # JoinLeftSemigroupCongruences
455
+ gap> S := PartitionMonoid(3);;
456
+ gap> pairs1 := [[Bipartition([[1, 2, 3, -1, -2, -3]]),
457
+ > Bipartition([[1, 2, -1, -2, -3], [3]])]];;
458
+ gap> pairs2 := [[Bipartition([[1, 2, 3, -1, -2, -3]]),
459
+ > Bipartition([[1, 2, 3, -1, -2], [-3]])],
460
+ > [Bipartition([[1, 2, -1, -2], [3, -3]]),
461
+ > Bipartition([[1, 2, -3], [3, -1, -2]])]];;
462
+ gap> cong1 := LeftSemigroupCongruence(S, pairs1);;
463
+ gap> cong2 := LeftSemigroupCongruence(S, pairs2);;
464
+ gap> JoinLeftSemigroupCongruences(cong1, cong2);
465
+ <left semigroup congruence over <regular bipartition *-monoid of size 203,
466
+ degree 3 with 4 generators> with 3 generating pairs>
467
+ gap> pairs1[1] in cong3;
468
+ true
469
+ gap> pairs2[1] in cong3;
470
+ true
471
+ gap> pairs2[2] in cong3;
472
+ true
473
+ gap> IsSubrelation(cong3, cong1) and IsSubrelation(cong3, cong2);
474
+ true
475
+ gap> IsSubrelation(cong2, cong1);
476
+ false
477
+
478
+ # JoinRightSemigroupCongruences
479
+ gap> S := PartitionMonoid(3);;
480
+ gap> pairs1 := [[Bipartition([[1, 2, 3, -1, -2, -3]]),
481
+ > Bipartition([[1, 2, -1, -2, -3], [3]])]];;
482
+ gap> pairs2 := [[Bipartition([[1, 2, 3, -1, -2, -3]]),
483
+ > Bipartition([[1, 2, 3, -1, -2], [-3]])],
484
+ > [Bipartition([[1, 2, -1, -2], [3, -3]]),
485
+ > Bipartition([[1, 2, -3], [3, -1, -2]])]];;
486
+ gap> cong1 := RightSemigroupCongruence(S, pairs1);;
487
+ gap> cong2 := RightSemigroupCongruence(S, pairs2);;
488
+ gap> JoinRightSemigroupCongruences(cong1, cong2);
489
+ <right semigroup congruence over <regular bipartition *-monoid of size 203,
490
+ degree 3 with 4 generators> with 3 generating pairs>
491
+ gap> pairs1[1] in cong3;
492
+ true
493
+ gap> pairs2[1] in cong3;
494
+ true
495
+ gap> pairs2[2] in cong3;
496
+ true
497
+ gap> IsSubrelation(cong3, cong1) and IsSubrelation(cong3, cong2);
498
+ true
499
+ gap> IsSubrelation(cong2, cong1);
500
+ false
501
+
502
+ # Test \in for pair of the form [x, x]
503
+ gap> S := FreeBand(3);
504
+ <free band on the generators [ x1, x2, x3 ]>
505
+ gap> cong := SemigroupCongruence(S, [S.1, S.1 * S.2]);
506
+ <2-sided semigroup congruence over <free band on the generators
507
+ [ x1, x2, x3 ]> with 1 generating pairs>
508
+ gap> [S.1, S.1] in cong;
509
+ true
510
+
511
+ # EquivalenceRelationPartition
512
+ gap> S := PartialBrauerMonoid(2);;
513
+ gap> pair := [[Bipartition([[1, 2], [-1], [-2]]),
514
+ > Bipartition([[1, -1], [2], [-2]])]];;
515
+ gap> cong := SemigroupCongruence(S, pair);;
516
+ gap> EquivalenceRelationPartition(cong);
517
+ [ [ <bipartition: [ 1, 2 ], [ -1, -2 ]>,
518
+ <bipartition: [ 1 ], [ 2 ], [ -1, -2 ]> ],
519
+ [ <bipartition: [ 1, -1 ], [ 2 ], [ -2 ]>,
520
+ <bipartition: [ 1 ], [ 2, -1 ], [ -2 ]>,
521
+ <bipartition: [ 1, 2 ], [ -1 ], [ -2 ]>,
522
+ <bipartition: [ 1, -2 ], [ 2 ], [ -1 ]>,
523
+ <bipartition: [ 1 ], [ 2, -2 ], [ -1 ]>,
524
+ <bipartition: [ 1 ], [ 2 ], [ -1 ], [ -2 ]> ] ]
525
+ gap> cong := SemigroupCongruence(S, []);;
526
+ gap> IsEmpty(EquivalenceRelationPartition(cong));
527
+ true
528
+ gap> cong := UniversalSemigroupCongruence(S);;
529
+ gap> Length(EquivalenceRelationPartition(cong)) = 1;
530
+ true
531
+
532
+ # SemigroupCongruenceByGeneratingPairs bad input
533
+ gap> S := FullTransformationMonoid(3);;
534
+ gap> x := Transformation([1, 1, 1, 1]);;
535
+ gap> SemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2, S.3]]);
536
+ Error, the 2nd argument <pairs> must consist of lists of length 2
537
+ gap> SemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2], [S.1, x]]);
538
+ Error, the 2nd argument <pairs> must consist of lists of elements of the 1st a\
539
+ rgument <S> (a semigroup)
540
+ gap> LeftSemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2, S.3]]);
541
+ Error, the 2nd argument <pairs> must consist of lists of length 2
542
+ gap> LeftSemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2], [S.1, x]]);
543
+ Error, the 2nd argument <pairs> must consist of lists of elements of the 1st a\
544
+ rgument <S> (a semigroup)
545
+ gap> RightSemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2, S.3]]);
546
+ Error, the 2nd argument <pairs> must consist of lists of length 2
547
+ gap> RightSemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2], [S.1, x]]);
548
+ Error, the 2nd argument <pairs> must consist of lists of elements of the 1st a\
549
+ rgument <S> (a semigroup)
550
+
551
+ # SemigroupCongruenceByGeneratingPairs for infinite semigroups
552
+ gap> S := Semigroup(
553
+ > [Matrix(IsMaxPlusMatrix, [[-2, 2, 0], [-1, 0, 0], [1, -3, 1]]),
554
+ > Matrix(IsMaxPlusMatrix, [[-infinity, 0, 0], [0, 1, 0], [1, -1, 0]])]);;
555
+ gap> pairs := [[S.1, S.2]];;
556
+ gap> SemigroupCongruenceByGeneratingPairs(S, pairs);
557
+ <2-sided semigroup congruence over <semigroup of 3x3 max-plus matrices with 2
558
+ generators> with 1 generating pairs>
559
+ gap> LeftSemigroupCongruenceByGeneratingPairs(S, pairs);
560
+ <left semigroup congruence over <semigroup of 3x3 max-plus matrices with 2
561
+ generators> with 1 generating pairs>
562
+ gap> RightSemigroupCongruenceByGeneratingPairs(S, pairs);
563
+ <right semigroup congruence over <semigroup of 3x3 max-plus matrices with 2
564
+ generators> with 1 generating pairs>
565
+
566
+ # a left congruence over an fp semigroup
567
+ gap> F := FreeSemigroup(2);;
568
+ gap> S := F / [[F.2 ^ 2, F.2],
569
+ > [F.1 ^ 3, F.1 ^ 2],
570
+ > [F.2 * F.1 ^ 2, F.1 ^ 2],
571
+ > [F.1 * (F.1 * F.2) ^ 2, F.1 ^ 2 * F.2 * F.1],
572
+ > [(F.1 * F.2) ^ 2 * F.1, F.1],
573
+ > [(F.2 * F.1) ^ 2 * F.2, F.2]];;
574
+ gap> pair := [S.1 * S.2 * S.1, S.1];;
575
+ gap> cong := LeftSemigroupCongruence(S, pair);;
576
+ gap> class := EquivalenceClassOfElement(cong, S.1);;
577
+ gap> Size(class);
578
+ 2
579
+ gap> Elements(class) = [S.1, S.1 * S.2 * S.1];
580
+ true
581
+ gap> classes := EquivalenceClasses(cong);;
582
+ gap> Length(classes);
583
+ 8
584
+ gap> ForAll(S, x -> Number(classes, c -> x in c) = 1);
585
+ true
586
+ gap> part := EquivalenceRelationPartitionWithSingletons(cong);;
587
+ gap> SortedList(List(part, Size)) = [1, 1, 1, 1, 1, 2, 2, 2];
588
+ true
589
+ gap> Set(Flat(part)) = Set(S);
590
+ true
591
+
592
+ # a right congruence over an fp semigroup
593
+ gap> F := FreeSemigroup(2);;
594
+ gap> S := F / [[F.2 ^ 2, F.2],
595
+ > [F.1 ^ 3, F.1 ^ 2],
596
+ > [F.2 * F.1 ^ 2, F.1 ^ 2],
597
+ > [F.1 * (F.1 * F.2) ^ 2, F.1 ^ 2 * F.2 * F.1],
598
+ > [(F.1 * F.2) ^ 2 * F.1, F.1],
599
+ > [(F.2 * F.1) ^ 2 * F.2, F.2]];;
600
+ gap> pair := [S.1 * S.2 * S.1, S.1];;
601
+ gap> cong := RightSemigroupCongruence(S, pair);;
602
+ gap> class := EquivalenceClassOfElement(cong, S.1);;
603
+ gap> Elements(class) = [S.1, S.1 * S.2 * S.1];
604
+ true
605
+ gap> cong2 := RightSemigroupCongruence(S, [[S.1, S.2]]);;
606
+ gap> class2 := EquivalenceClassOfElement(cong2, S.1);;
607
+ gap> class < class2;
608
+ false
609
+
610
+ # \in: Bad input for an fp semigroup
611
+ gap> F := FreeSemigroup(2);;
612
+ gap> S := F / [[F.2 ^ 2, F.2],
613
+ > [F.1 ^ 3, F.1 ^ 2],
614
+ > [F.2 * F.1 ^ 2, F.1 ^ 2],
615
+ > [F.1 * (F.1 * F.2) ^ 2, F.1 ^ 2 * F.2 * F.1],
616
+ > [(F.1 * F.2) ^ 2 * F.1, F.1],
617
+ > [(F.2 * F.1) ^ 2 * F.2, F.2]];;
618
+ gap> pair := [S.1 * S.2 * S.1, S.1];;
619
+ gap> cong := RightSemigroupCongruence(S, pair);;
620
+ gap> [Transformation([2, 1, 1, 2, 1])] in cong;
621
+ Error, the 1st argument (a list) does not have length 2
622
+ gap> [Transformation([2, 1, 1, 2, 1]), Transformation([5, 2, 1, 2, 2])] in cong;
623
+ Error, the items in the 1st argument (a list) do not all belong to the range o\
624
+ f the 2nd argument (a right semigroup congruence)
625
+
626
+ # comparing congruence classes over fp semigroups
627
+ gap> F := FreeSemigroup(3);;
628
+ gap> gens := GeneratorsOfSemigroup(F);;
629
+ gap> rels := [];;
630
+ gap> x := 0;;
631
+ gap> for x in [1 .. Length(gens) - 1] do
632
+ > Append(rels, List(gens, y -> [gens[x] * y, y * gens[x]]));
633
+ > Add(rels, [gens[x] ^ (x + 1), gens[x]]);
634
+ > Add(rels, [gens[x] * Last(gens), gens[x]]);
635
+ > Add(rels, [Last(gens) * gens[x], gens[x]]);
636
+ > od;
637
+ gap> S := F / rels;;
638
+ gap> sgens := GeneratorsOfSemigroup(S);;
639
+ gap> cong := SemigroupCongruenceByGeneratingPairs(S, [[sgens[1], sgens[2]]]);;
640
+ gap> class1 := EquivalenceClassOfElement(cong, sgens[3]);;
641
+ gap> class2 := EquivalenceClassOfElement(cong, sgens[2]);;
642
+ gap> class1 < class2;
643
+ false
644
+ gap> class2 < class1;
645
+ true
646
+ gap> class1 > class2;
647
+ true
648
+ gap> class2 > class1;
649
+ false
650
+ gap> class1 = class2;
651
+ false
652
+ gap> class1 <> class2;
653
+ true
654
+
655
+ # creating a congruence over an fp monoid
656
+ gap> F := FreeMonoid(2);;
657
+ gap> S := F / [[F.2 ^ 2, F.2], [F.1 ^ 3, F.1 ^ 2]];;
658
+ gap> SemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2]]);
659
+ <2-sided semigroup congruence over <fp monoid with 2 generators and
660
+ 2 relations of length 10> with 1 generating pairs>
661
+ gap> LeftSemigroupCongruenceByGeneratingPairs(F, [[F.1, F.2]]);
662
+ <left semigroup congruence over <free monoid on the generators
663
+ [ m1, m2 ]> with 1 generating pairs>
664
+ gap> RightSemigroupCongruenceByGeneratingPairs(F, [[F.1, F.2]]);
665
+ <right semigroup congruence over <free monoid on the generators
666
+ [ m1, m2 ]> with 1 generating pairs>
667
+ gap> LeftSemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2]]);
668
+ <left semigroup congruence over <fp monoid with 2 generators and
669
+ 2 relations of length 10> with 1 generating pairs>
670
+ gap> RightSemigroupCongruenceByGeneratingPairs(S, [[S.1, S.2]]);
671
+ <right semigroup congruence over <fp monoid with 2 generators and
672
+ 2 relations of length 10> with 1 generating pairs>
673
+
674
+ # tests from congfpmon.tst
675
+ gap> F := FreeMonoid(2);;
676
+ gap> M := F / [[F.2 ^ 2, F.2], [F.1 ^ 3, F.1 ^ 2]];;
677
+ gap> cong := SemigroupCongruenceByGeneratingPairs(M, [[M.2]]);
678
+ Error, the 2nd argument <pairs> must consist of lists of length 2
679
+ gap> cong := SemigroupCongruenceByGeneratingPairs(M, [[M.1, F.1]]);
680
+ Error, the 2nd argument <pairs> must consist of lists of elements of the 1st a\
681
+ rgument <S> (a semigroup)
682
+ gap> cong := LeftSemigroupCongruenceByGeneratingPairs(M, [[M.2]]);
683
+ Error, the 2nd argument <pairs> must consist of lists of length 2
684
+ gap> cong := LeftSemigroupCongruenceByGeneratingPairs(M, [[M.1, F.1]]);
685
+ Error, the 2nd argument <pairs> must consist of lists of elements of the 1st a\
686
+ rgument <S> (a semigroup)
687
+ gap> cong := RightSemigroupCongruenceByGeneratingPairs(M, [[M.2]]);
688
+ Error, the 2nd argument <pairs> must consist of lists of length 2
689
+ gap> cong := RightSemigroupCongruenceByGeneratingPairs(M, [[M.1, F.1]]);
690
+ Error, the 2nd argument <pairs> must consist of lists of elements of the 1st a\
691
+ rgument <S> (a semigroup)
692
+ gap> cong := SemigroupCongruenceByGeneratingPairs(M, [[M.1, M.2]]);;
693
+ gap> [M.1, M.2, M.2 ^ 2] in cong;
694
+ Error, the 1st argument (a list) does not have length 2
695
+ gap> [F.1, F.2] in cong;
696
+ Error, the items in the 1st argument (a list) do not all belong to the range o\
697
+ f the 2nd argument (a 2-sided semigroup congruence)
698
+ gap> EquivalenceClassOfElement(cong, Transformation([1, 2, 1]));
699
+ Error, the 2nd argument (a mult. elt.) does not belong to the range of the 1st\
700
+ argument (a 2-sided congruence)
701
+
702
+ # A 2-sided example
703
+ gap> F := FreeMonoid(2);;
704
+ gap> M := F / [[F.2 ^ 2, F.2],
705
+ > [F.1 ^ 3, F.1 ^ 2],
706
+ > [F.2 * F.1 ^ 2, F.1 ^ 2],
707
+ > [F.1 * (F.1 * F.2) ^ 2, F.1 ^ 2 * F.2 * F.1],
708
+ > [(F.2 * F.1) ^ 2 * F.2, F.2]];;
709
+ gap> Size(M);
710
+ 13
711
+ gap> M.1 ^ 2 = M.2 * M.1;
712
+ false
713
+ gap> (M.2 * M.1) ^ 2 * M.2 * M.1 ^ 2 = M.1 ^ 3;
714
+ true
715
+ gap> pair := [M.1 ^ 2 * M.2 * M.1, M.1 * M.2 * M.1];;
716
+ gap> cong := SemigroupCongruence(M, pair);
717
+ <2-sided semigroup congruence over <fp monoid with 2 generators and
718
+ 5 relations of length 30> with 1 generating pairs>
719
+ gap> NrEquivalenceClasses(cong);
720
+ 3
721
+ gap> [M.2, M.2 * M.1] in cong;
722
+ true
723
+ gap> part := EquivalenceRelationPartition(cong);;
724
+ gap> Length(part) = 1;
725
+ true
726
+ gap> Length(part[1]) = 11;
727
+ true
728
+ gap> Size(EquivalenceRelationCanonicalPartition(cong));
729
+ 1
730
+ gap> Size(EquivalenceRelationCanonicalPartition(cong)[1]);
731
+ 11
732
+ gap> EquivalenceRelationCanonicalLookup(cong);
733
+ [ 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ]
734
+ gap> ImagesElm(cong, GeneratorsOfMonoid(M)[1]);
735
+ [ m1 ]
736
+ gap> ImagesElm(cong, One(M));
737
+ [ <identity ...> ]
738
+ gap> classes := EquivalenceClasses(cong);;
739
+ gap> SortedList(List(classes, Size));
740
+ [ 1, 1, 11 ]
741
+ gap> gens := GeneratorsOfMonoid(M);;
742
+ gap> class1 := EquivalenceClassOfElement(cong, gens[2] * gens[1]);;
743
+ gap> class2 := EquivalenceClassOfElement(cong, gens[1]);;
744
+ gap> gens[1] ^ 2 in class1;
745
+ true
746
+ gap> gens[1] in class1;
747
+ false
748
+ gap> class1 = class2;
749
+ false
750
+ gap> enum := Enumerator(class1);;
751
+ gap> AsSSortedList(enum);
752
+ [ m2, m1^2, m1*m2, m2*m1, m1^2*m2, m1*m2*m1, m2*m1*m2, m1^2*m2*m1, (m1*m2)^2,
753
+ (m2*m1)^2, (m1*m2)^2*m1 ]
754
+ gap> Size(enum);
755
+ 11
756
+ gap> class1 * class2 = EquivalenceClassOfElement(cong, gens[2] ^ 20 * gens[1] ^ 42);
757
+ true
758
+ gap> class1 * class2 = EquivalenceClassOfElement(cong, One(M));
759
+ false
760
+
761
+ # A left congruence example
762
+ gap> F := FreeMonoid(2);;
763
+ gap> M := F / [[F.1 * F.2 ^ 2, F.2 ^ 2],
764
+ > [F.2 ^ 3, F.2 ^ 2],
765
+ > [F.1 ^ 4, F.1],
766
+ > [F.2 * F.1 ^ 2 * F.2, F.2 ^ 2],
767
+ > [F.2 * F.1 ^ 3 * F.2, F.2],
768
+ > [(F.2 * F.1) ^ 2 * F.2, F.2],
769
+ > [F.2 ^ 2 * F.1 ^ 3, F.2 ^ 2],
770
+ > [F.2 * (F.2 * F.1) ^ 2, F.2 ^ 2 * F.1 ^ 2]];;
771
+ gap> Size(M);
772
+ 40
773
+ gap> cong := LeftSemigroupCongruence(M, [M.1, M.2 ^ 3]);
774
+ <left semigroup congruence over <fp monoid with 2 generators and
775
+ 8 relations of length 51> with 1 generating pairs>
776
+ gap> IsLeftSemigroupCongruence(cong);
777
+ true
778
+ gap> HasIsSemigroupCongruence(cong);
779
+ false
780
+ gap> NrEquivalenceClasses(cong);
781
+ 11
782
+ gap> [M.1 ^ 9, M.2 * M.1 ^ 3 * M.2 * M.1] in cong;
783
+ true
784
+ gap> part := EquivalenceRelationPartition(cong);;
785
+ gap> Length(part) = 1;
786
+ true
787
+ gap> Length(part[1]) = 30;
788
+ true
789
+ gap> part := EquivalenceRelationCanonicalPartition(cong);;
790
+ gap> Size(part);
791
+ 1
792
+ gap> Size(part[1]);
793
+ 30
794
+ gap> EquivalenceRelationCanonicalLookup(cong);
795
+ [ 1, 2, 3, 2, 4, 2, 2, 2, 5, 2, 2, 6, 2, 7, 2, 2, 8, 2, 2, 2, 9, 2, 2, 10, 2,
796
+ 2, 2, 2, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ]
797
+ gap> Set(ImagesElm(cong, M.1)) = part[1];
798
+ true
799
+ gap> ImagesElm(cong, One(M));
800
+ [ <identity ...> ]
801
+ gap> classes := EquivalenceClasses(cong);;
802
+ gap> SortedList(List(classes, Size));
803
+ [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30 ]
804
+ gap> class1 := EquivalenceClassOfElement(cong, M.2 * M.1 ^ 2);;
805
+ gap> class2 := EquivalenceClassOfElement(cong, M.2);;
806
+ gap> M.1 in class1;
807
+ true
808
+ gap> M.2 in class1;
809
+ false
810
+ gap> class1 = class2;
811
+ false
812
+ gap> enum := Enumerator(class1);;
813
+ gap> M.2 * M.1 in enum;
814
+ true
815
+ gap> M.2 * M.1 ^ 3 in enum;
816
+ true
817
+ gap> M.2 * M.1 * M.2 * M.1 in enum;
818
+ true
819
+ gap> Size(enum);
820
+ 30
821
+
822
+ # A right congruence example
823
+ gap> F := FreeMonoid(2);;
824
+ gap> M := F / [[F.1 * F.2 ^ 2, F.2 ^ 2],
825
+ > [F.2 ^ 3, F.2 ^ 2],
826
+ > [F.1 ^ 4, F.1],
827
+ > [F.2 * F.1 ^ 2 * F.2, F.2 ^ 2],
828
+ > [F.2 * F.1 ^ 3 * F.2, F.2],
829
+ > [(F.2 * F.1) ^ 2 * F.2, F.2],
830
+ > [F.2 ^ 2 * F.1 ^ 3, F.2 ^ 2],
831
+ > [F.2 * (F.2 * F.1) ^ 2, F.2 ^ 2 * F.1 ^ 2]];;
832
+ gap> Size(M);
833
+ 40
834
+ gap> cong := RightSemigroupCongruence(M, [M.1, M.2 ^ 3]);
835
+ <right semigroup congruence over <fp monoid with 2 generators and
836
+ 8 relations of length 51> with 1 generating pairs>
837
+ gap> IsRightSemigroupCongruence(cong);
838
+ true
839
+ gap> HasIsSemigroupCongruence(cong);
840
+ false
841
+ gap> NrEquivalenceClasses(cong);
842
+ 13
843
+ gap> [M.1 ^ 9, M.2 * M.1 ^ 3 * M.2 * M.1] in cong;
844
+ false
845
+ gap> [M.2 * M.1 * M.2 ^ 2, M.1 ^ 4] in cong;
846
+ true
847
+ gap> part := EquivalenceRelationCanonicalPartition(cong);;
848
+ gap> Length(part) = 4;
849
+ true
850
+ gap> Set(part, Length) = [4, 8, 11];
851
+ true
852
+ gap> part := EquivalenceRelationCanonicalPartition(cong);;
853
+ gap> Length(part);
854
+ 4
855
+ gap> SortedList(List(part, Length));
856
+ [ 4, 8, 8, 11 ]
857
+ gap> EquivalenceRelationCanonicalLookup(cong);
858
+ [ 1, 2, 3, 4, 2, 5, 2, 6, 7, 4, 8, 9, 4, 2, 6, 6, 7, 10, 11, 6, 7, 4, 2, 2,
859
+ 2, 6, 12, 6, 7, 4, 4, 2, 13, 2, 6, 6, 4, 2, 2, 4 ]
860
+ gap> part1 := First(part, l -> M.1 in l);;
861
+ gap> Set(ImagesElm(cong, M.1)) = part1;
862
+ true
863
+ gap> NrEquivalenceClasses(cong);
864
+ 13
865
+ gap> ImagesElm(cong, One(M));
866
+ [ <identity ...> ]
867
+ gap> classes := EquivalenceClasses(cong);;
868
+ gap> SortedList(List(classes, Size));
869
+ [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8, 11 ]
870
+ gap> class1 := EquivalenceClassOfElement(cong, M.1 * (M.2 * M.1) ^ 2 * M.2);;
871
+ gap> class2 := EquivalenceClassOfElement(cong, M.2 ^ 2 * M.1);;
872
+ gap> M.1 in class1;
873
+ true
874
+ gap> M.2 in class1;
875
+ false
876
+ gap> class1 = class2;
877
+ false
878
+ gap> enum := Enumerator(class1);;
879
+ gap> M.2 ^ 2 in enum;
880
+ true
881
+ gap> M.1 * (M.1 * M.2) ^ 2 * M.1 ^ 3 in enum;
882
+ true
883
+ gap> enum[Position(enum, M.1 * (M.1 * M.2) ^ 2 * M.1 ^ 3)]
884
+ > = M.1 * (M.1 * M.2) ^ 2 * M.1 ^ 3;
885
+ true
886
+ gap> Size(enum);
887
+ 11
888
+
889
+ # Joining two congs together
890
+ gap> F := FreeMonoid(2);;
891
+ gap> M := F / [[F.1 ^ 4, F.1 ^ 3],
892
+ > [F.1 ^ 3 * F.2, F.1 ^ 3],
893
+ > [F.1 * F.2 ^ 2 * F.1, F.1 ^ 2],
894
+ > [F.1 * F.2 ^ 3, F.1],
895
+ > [F.2 * F.1 ^ 3, F.1 ^ 3],
896
+ > [F.2 ^ 3 * F.1, F.1],
897
+ > [F.2 ^ 4, F.2],
898
+ > [F.1 ^ 2 * F.2 * F.1 ^ 2, F.1 ^ 2],
899
+ > [F.1 * (F.1 * F.2) ^ 2, F.1 ^ 2 * F.2 * F.1],
900
+ > [(F.1 * F.2) ^ 2 * F.1, F.1],
901
+ > [(F.2 * F.1) ^ 2 * F.1, F.1 * F.2 * F.1 ^ 2]];;
902
+ gap> Size(M);
903
+ 39
904
+ gap> cong1 := SemigroupCongruence(M, [M.1, M.2]);;
905
+ gap> cong2 := SemigroupCongruence(M, [M.1, M.1 ^ 2]);;
906
+ gap> cong1 = cong2;
907
+ false
908
+ gap> IsSubrelation(cong1, cong2);
909
+ true
910
+ gap> JoinSemigroupCongruences(cong1, cong2) = cong1;
911
+ true
912
+ gap> M := F / [[F.1, F.2]];;
913
+ gap> cong3 := SemigroupCongruence(M, [M.1, M.2 ^ 10]);;
914
+ gap> JoinSemigroupCongruences(cong1, cong3);
915
+ Error, cannot form the join of congruences over different semigroups
916
+
917
+ # Joining two left congs together
918
+ gap> F := FreeMonoid(2);;
919
+ gap> M := F / [[F.1 ^ 4, F.1 ^ 3],
920
+ > [F.1 ^ 3 * F.2, F.1 ^ 3],
921
+ > [F.1 * F.2 ^ 2 * F.1, F.1 ^ 2],
922
+ > [F.1 * F.2 ^ 3, F.1],
923
+ > [F.2 * F.1 ^ 3, F.1 ^ 3],
924
+ > [F.2 ^ 3 * F.1, F.1],
925
+ > [F.2 ^ 4, F.2],
926
+ > [F.1 ^ 2 * F.2 * F.1 ^ 2, F.1 ^ 2],
927
+ > [F.1 * (F.1 * F.2) ^ 2, F.1 ^ 2 * F.2 * F.1],
928
+ > [(F.1 * F.2) ^ 2 * F.1, F.1],
929
+ > [(F.2 * F.1) ^ 2 * F.1, F.1 * F.2 * F.1 ^ 2]];;
930
+ gap> Size(M);
931
+ 39
932
+ gap> cong1 := LeftSemigroupCongruence(M, [M.1, M.2]);;
933
+ gap> cong2 := LeftSemigroupCongruence(M, [M.1, M.1 ^ 2]);;
934
+ gap> cong1 = cong2;
935
+ false
936
+ gap> IsSubrelation(cong1, cong2);
937
+ true
938
+ gap> JoinLeftSemigroupCongruences(cong1, cong2) = cong1;
939
+ true
940
+ gap> M := F / [[F.1, F.2]];;
941
+ gap> cong3 := SemigroupCongruence(M, [M.1, M.2 ^ 10]);;
942
+ gap> JoinLeftSemigroupCongruences(cong1, cong3);
943
+ Error, no method found! For debugging hints type ?Recovery from NoMethodFound
944
+ Error, no 1st choice method found for `JoinLeftSemigroupCongruences' on 2 argu\
945
+ ments
946
+
947
+ # Joining two right congs together
948
+ gap> F := FreeMonoid(2);;
949
+ gap> M := F / [[F.1 ^ 4, F.1 ^ 3],
950
+ > [F.1 ^ 3 * F.2, F.1 ^ 3],
951
+ > [F.1 * F.2 ^ 2 * F.1, F.1 ^ 2],
952
+ > [F.1 * F.2 ^ 3, F.1],
953
+ > [F.2 * F.1 ^ 3, F.1 ^ 3],
954
+ > [F.2 ^ 3 * F.1, F.1],
955
+ > [F.2 ^ 4, F.2],
956
+ > [F.1 ^ 2 * F.2 * F.1 ^ 2, F.1 ^ 2],
957
+ > [F.1 * (F.1 * F.2) ^ 2, F.1 ^ 2 * F.2 * F.1],
958
+ > [(F.1 * F.2) ^ 2 * F.1, F.1],
959
+ > [(F.2 * F.1) ^ 2 * F.1, F.1 * F.2 * F.1 ^ 2]];;
960
+ gap> Size(M);
961
+ 39
962
+ gap> cong1 := RightSemigroupCongruence(M, [M.1, M.2]);;
963
+ gap> cong2 := RightSemigroupCongruence(M, [M.1, M.1 ^ 2]);;
964
+ gap> cong1 = cong2;
965
+ false
966
+ gap> IsSubrelation(cong1, cong2);
967
+ true
968
+ gap> JoinRightSemigroupCongruences(cong1, cong2) = cong1;
969
+ true
970
+ gap> M := F / [[F.1, F.2]];;
971
+ gap> cong3 := SemigroupCongruence(M, [M.1, M.2 ^ 10]);;
972
+ gap> JoinRightSemigroupCongruences(cong1, cong3);
973
+ Error, no method found! For debugging hints type ?Recovery from NoMethodFound
974
+ Error, no 1st choice method found for `JoinRightSemigroupCongruences' on 2 arg\
975
+ uments
976
+
977
+ # AsSemigroupCongruenceByGeneratingPairs
978
+ gap> S := ReesMatrixSemigroup(SymmetricGroup(3), [[(1, 2), ()], [(), (1, 3)]]);
979
+ <Rees matrix semigroup 2x2 over Sym( [ 1 .. 3 ] )>
980
+ gap> cong := RMSCongruenceByLinkedTriple(S, Group((1, 2, 3)),
981
+ > [[1], [2]], [[1, 2]]);;
982
+ gap> ccong := AsSemigroupCongruenceByGeneratingPairs(cong);;
983
+ gap> C := UniversalSemigroupCongruence(S);;
984
+ gap> AsSemigroupCongruenceByGeneratingPairs(C);
985
+ <semigroup congruence over <Rees matrix semigroup 2x2 over Sym( [ 1 .. 3 ] )>
986
+ with linked triple (S3,1,1)>
987
+ gap> S := InverseSemigroup([PartialPerm([1, 2], [1, 2]),
988
+ > PartialPerm([1, 2], [2, 3])]);;
989
+ gap> pairs := [PartialPerm([], []), PartialPerm([1], [1])];;
990
+ gap> C := SemigroupCongruence(S, pairs);
991
+ <2-sided semigroup congruence over <inverse partial perm semigroup
992
+ of size 14, rank 3 with 2 generators> with 1 generating pairs>
993
+ gap> AsSemigroupCongruenceByGeneratingPairs(C);
994
+ <2-sided semigroup congruence over <inverse partial perm semigroup
995
+ of size 14, rank 3 with 2 generators> with 1 generating pairs>
996
+ gap> C := RightSemigroupCongruence(S, pairs);
997
+ <right semigroup congruence over <inverse partial perm semigroup of size 14,
998
+ rank 3 with 2 generators> with 1 generating pairs>
999
+ gap> AsRightSemigroupCongruenceByGeneratingPairs(C);
1000
+ <right semigroup congruence over <inverse partial perm semigroup of size 14,
1001
+ rank 3 with 2 generators> with 1 generating pairs>
1002
+ gap> C := LeftSemigroupCongruence(S, pairs);
1003
+ <left semigroup congruence over <inverse partial perm semigroup of size 14,
1004
+ rank 3 with 2 generators> with 1 generating pairs>
1005
+ gap> AsLeftSemigroupCongruenceByGeneratingPairs(C);
1006
+ <left semigroup congruence over <inverse partial perm semigroup of size 14,
1007
+ rank 3 with 2 generators> with 1 generating pairs>
1008
+
1009
+ #
1010
+ gap> SEMIGROUPS.StopTest();
1011
+ gap> STOP_TEST("Semigroups package: standard/congruences/congpairs.tst");