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

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

Potentially problematic release.


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

Files changed (354) hide show
  1. gap/pkg/semigroups/CHANGELOG.md +1699 -0
  2. gap/pkg/semigroups/CONTRIBUTING.md +91 -0
  3. gap/pkg/semigroups/GNUmakefile +110 -0
  4. gap/pkg/semigroups/GNUmakefile.in +110 -0
  5. gap/pkg/semigroups/GPL +674 -0
  6. gap/pkg/semigroups/LICENSE +16 -0
  7. gap/pkg/semigroups/Makefile +26 -0
  8. gap/pkg/semigroups/Makefile.gappkg +225 -0
  9. gap/pkg/semigroups/PackageInfo.g +529 -0
  10. gap/pkg/semigroups/README.md +102 -0
  11. gap/pkg/semigroups/VERSIONS +112 -0
  12. gap/pkg/semigroups/aclocal.m4 +375 -0
  13. gap/pkg/semigroups/autogen.sh +25 -0
  14. gap/pkg/semigroups/bin/aarch64-apple-darwin23-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1158 -0
  17. gap/pkg/semigroups/config.status +1131 -0
  18. gap/pkg/semigroups/config.sub +1960 -0
  19. gap/pkg/semigroups/configure +9742 -0
  20. gap/pkg/semigroups/configure.ac +71 -0
  21. gap/pkg/semigroups/data/doc/greens.pickle +1 -0
  22. gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
  23. gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
  24. gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
  25. gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
  26. gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
  27. gap/pkg/semigroups/data/tst/bipart4 +10 -0
  28. gap/pkg/semigroups/data/tst/pperm10 +1 -0
  29. gap/pkg/semigroups/data/tst/tables.gz +0 -0
  30. gap/pkg/semigroups/data/tst/testdata +1 -0
  31. gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
  32. gap/pkg/semigroups/data/tst/trans3 +7 -0
  33. gap/pkg/semigroups/data/tst/trans3-old +7 -0
  34. gap/pkg/semigroups/environment.yml +7 -0
  35. gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
  36. gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
  37. gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
  38. gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
  39. gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
  40. gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
  41. gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
  42. gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
  43. gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
  44. gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
  45. gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
  46. gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
  47. gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
  48. gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
  49. gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
  50. gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
  51. gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
  52. gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
  53. gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
  54. gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
  55. gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
  56. gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
  57. gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
  58. gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
  59. gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
  60. gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
  61. gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
  62. gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
  63. gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
  64. gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
  65. gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
  66. gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
  67. gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
  68. gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
  69. gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
  70. gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
  71. gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
  72. gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
  73. gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
  74. gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
  75. gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
  76. gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
  77. gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
  78. gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
  79. gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
  80. gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
  81. gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
  82. gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
  83. gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
  84. gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
  85. gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
  86. gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
  87. gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
  88. gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
  89. gap/pkg/semigroups/gap/elements/elements.gd +11 -0
  90. gap/pkg/semigroups/gap/elements/elements.gi +121 -0
  91. gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
  92. gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
  93. gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
  94. gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
  95. gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
  96. gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
  97. gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
  98. gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
  99. gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
  100. gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
  101. gap/pkg/semigroups/gap/elements/star.gd +21 -0
  102. gap/pkg/semigroups/gap/elements/star.gi +21 -0
  103. gap/pkg/semigroups/gap/elements/trans.gd +13 -0
  104. gap/pkg/semigroups/gap/elements/trans.gi +50 -0
  105. gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
  106. gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
  107. gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
  108. gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
  109. gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
  110. gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
  111. gap/pkg/semigroups/gap/fp/word.gd +15 -0
  112. gap/pkg/semigroups/gap/fp/word.gi +67 -0
  113. gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
  114. gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
  115. gap/pkg/semigroups/gap/greens/acting.gd +81 -0
  116. gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
  117. gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
  118. gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
  119. gap/pkg/semigroups/gap/greens/generic.gd +117 -0
  120. gap/pkg/semigroups/gap/greens/generic.gi +630 -0
  121. gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
  122. gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
  123. gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
  124. gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
  125. gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
  126. gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
  127. gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
  128. gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
  129. gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
  130. gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
  131. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
  132. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
  133. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
  134. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
  135. gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
  136. gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
  137. gap/pkg/semigroups/gap/main/acting.gd +36 -0
  138. gap/pkg/semigroups/gap/main/acting.gi +779 -0
  139. gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
  140. gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
  141. gap/pkg/semigroups/gap/main/graded.gd +26 -0
  142. gap/pkg/semigroups/gap/main/graded.gi +355 -0
  143. gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
  144. gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
  145. gap/pkg/semigroups/gap/main/orbits.gd +24 -0
  146. gap/pkg/semigroups/gap/main/orbits.gi +512 -0
  147. gap/pkg/semigroups/gap/main/semiact.gd +20 -0
  148. gap/pkg/semigroups/gap/main/semiact.gi +821 -0
  149. gap/pkg/semigroups/gap/main/setup.gd +61 -0
  150. gap/pkg/semigroups/gap/main/setup.gi +1094 -0
  151. gap/pkg/semigroups/gap/obsolete.gd +9 -0
  152. gap/pkg/semigroups/gap/obsolete.gi +14 -0
  153. gap/pkg/semigroups/gap/options.g +55 -0
  154. gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
  155. gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
  156. gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
  157. gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
  158. gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
  159. gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
  160. gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
  161. gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
  162. gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
  163. gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
  164. gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
  165. gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
  166. gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
  167. gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
  168. gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
  169. gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
  170. gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
  171. gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
  172. gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
  173. gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
  174. gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
  175. gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
  176. gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
  177. gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
  178. gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
  179. gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
  180. gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
  181. gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
  182. gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
  183. gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
  184. gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
  185. gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
  186. gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
  187. gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
  188. gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
  189. gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
  190. gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
  191. gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
  192. gap/pkg/semigroups/gap/tools/display.gd +24 -0
  193. gap/pkg/semigroups/gap/tools/display.gi +749 -0
  194. gap/pkg/semigroups/gap/tools/io.gd +17 -0
  195. gap/pkg/semigroups/gap/tools/io.gi +543 -0
  196. gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
  197. gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
  198. gap/pkg/semigroups/gap/tools/utils.gd +19 -0
  199. gap/pkg/semigroups/gap/tools/utils.gi +756 -0
  200. gap/pkg/semigroups/gapbind14/.ccls +18 -0
  201. gap/pkg/semigroups/gapbind14/.clang-format +104 -0
  202. gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
  203. gap/pkg/semigroups/gapbind14/LICENSE +674 -0
  204. gap/pkg/semigroups/gapbind14/README.md +76 -0
  205. gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
  206. gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
  207. gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
  208. gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
  209. gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
  210. gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
  211. gap/pkg/semigroups/gapbind14/demo/configure +34 -0
  212. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
  213. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
  214. gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
  215. gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
  216. gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
  217. gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
  218. gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
  219. gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
  220. gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
  221. gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
  222. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
  223. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
  224. gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
  225. gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
  226. gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
  227. gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
  228. gap/pkg/semigroups/init.g +150 -0
  229. gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
  230. gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
  231. gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
  232. gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
  233. gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
  234. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
  235. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
  236. gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
  237. gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
  238. gap/pkg/semigroups/m4/find_gap.m4 +94 -0
  239. gap/pkg/semigroups/makedoc.g +153 -0
  240. gap/pkg/semigroups/prerequisites.sh +62 -0
  241. gap/pkg/semigroups/read.g +105 -0
  242. gap/pkg/semigroups/release.toml +6 -0
  243. gap/pkg/semigroups/tst/extreme/README +2 -0
  244. gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
  245. gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
  246. gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
  247. gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
  248. gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
  249. gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
  250. gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
  251. gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
  252. gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
  253. gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
  254. gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
  255. gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
  256. gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
  257. gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
  258. gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
  259. gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
  260. gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
  261. gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
  262. gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
  263. gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
  264. gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
  265. gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
  266. gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
  267. gap/pkg/semigroups/tst/standard/README +2 -0
  268. gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
  269. gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
  270. gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
  271. gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
  272. gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
  273. gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
  274. gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
  275. gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
  276. gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
  277. gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
  278. gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
  279. gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
  280. gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
  281. gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
  282. gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
  283. gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
  284. gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
  285. gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
  286. gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
  287. gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
  288. gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
  289. gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
  290. gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
  291. gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
  292. gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
  293. gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
  294. gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
  295. gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
  296. gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
  297. gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
  298. gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
  299. gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
  300. gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
  301. gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
  302. gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
  303. gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
  304. gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
  305. gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
  306. gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
  307. gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
  308. gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
  309. gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
  310. gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
  311. gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
  312. gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
  313. gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
  314. gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
  315. gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
  316. gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
  317. gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
  318. gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
  319. gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
  320. gap/pkg/semigroups/tst/standard/options.tst +54 -0
  321. gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
  322. gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
  323. gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
  324. gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
  325. gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
  326. gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
  327. gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
  328. gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
  329. gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
  330. gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
  331. gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
  332. gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
  333. gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
  334. gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
  335. gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
  336. gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
  337. gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
  338. gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
  339. gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
  340. gap/pkg/semigroups/tst/testinstall.tst +1815 -0
  341. gap/pkg/semigroups/tst/teststandard.g +22 -0
  342. gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
  343. gap/pkg/semigroups/tst/workspaces/load.g +11 -0
  344. gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
  345. gap/pkg/semigroups/tst/workspaces/save.g +14 -0
  346. passagemath_gap_pkg_semigroups-10.6.30.dist-info/METADATA +93 -0
  347. passagemath_gap_pkg_semigroups-10.6.30.dist-info/METADATA.bak +94 -0
  348. passagemath_gap_pkg_semigroups-10.6.30.dist-info/RECORD +354 -0
  349. passagemath_gap_pkg_semigroups-10.6.30.dist-info/WHEEL +6 -0
  350. passagemath_gap_pkg_semigroups-10.6.30.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.dylibs/libsemigroups.2.dylib +0 -0
  352. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  353. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  354. sage/libs/gap_pkg_semigroups.abi3.so +0 -0
@@ -0,0 +1,25 @@
1
+ #############################################################################
2
+ ##
3
+ ## attributes/dual.gd
4
+ ## Copyright (C) 2018-2022 James D. Mitchell
5
+ ## Finn Smith
6
+ ##
7
+ ## Licensing information can be found in the README file of this package.
8
+ ##
9
+ #############################################################################
10
+ ##
11
+
12
+ DeclareCategory("IsDualSemigroupElement", IsAssociativeElement);
13
+ DeclareCategoryCollections("IsDualSemigroupElement");
14
+ DeclareAttribute("DualSemigroup", IsSemigroup);
15
+
16
+ # TODO (major release): remove "Rep" and update docs
17
+ DeclareCategory("IsDualSemigroupRep",
18
+ IsDualSemigroupElementCollection and IsSemigroup);
19
+
20
+ DeclareAttribute("DualSemigroupOfFamily", IsFamily);
21
+ DeclareAttribute("AntiIsomorphismDualSemigroup", IsSemigroup);
22
+ DeclareGlobalFunction("UnderlyingElementOfDualSemigroupElement");
23
+
24
+ InstallTrueMethod(IsDualSemigroupRep,
25
+ IsSemigroup and IsDualSemigroupElementCollection);
@@ -0,0 +1,209 @@
1
+ #############################################################################
2
+ ##
3
+ ## attributes/dual.gi
4
+ ## Copyright (C) 2018-2022 James D. Mitchell
5
+ ## Finn Smith
6
+ ##
7
+ ## Licensing information can be found in the README file of this package.
8
+ ##
9
+ #############################################################################
10
+ ##
11
+
12
+ # This file contains an implementation of dual semigroups. We only provide
13
+ # enough functionality to allow dual semigroups to work as semigroups. This is
14
+ # to avoid having to install versions of every function in Semigroups specially
15
+ # for dual semigroup representations. In some cases special functions would be
16
+ # faster.
17
+
18
+ InstallMethod(DualSemigroup, "for a semigroup",
19
+ [IsSemigroup],
20
+ function(S)
21
+ local fam, dual, filts, type, map;
22
+
23
+ if IsDualSemigroupRep(S) then
24
+ if HasGeneratorsOfSemigroup(S) then
25
+ return Semigroup(List(GeneratorsOfSemigroup(S),
26
+ UnderlyingElementOfDualSemigroupElement));
27
+ fi;
28
+ ErrorNoReturn("this dual semigroup cannot be constructed ",
29
+ "without knowing generators");
30
+ fi;
31
+
32
+ fam := NewFamily("DualSemigroupElementsFamily", IsDualSemigroupElement);
33
+ dual := rec();
34
+ ObjectifyWithAttributes(dual,
35
+ NewType(CollectionsFamily(fam),
36
+ IsSemigroup and
37
+ IsWholeFamily and
38
+ IsDualSemigroupRep and
39
+ IsAttributeStoringRep),
40
+ DualSemigroup,
41
+ S,
42
+ CanUseGapFroidurePin,
43
+ CanUseFroidurePin(S));
44
+
45
+ filts := IsDualSemigroupElement;
46
+ if IsMultiplicativeElementWithOne(Representative(S)) then
47
+ filts := filts and IsMultiplicativeElementWithOne;
48
+ fi;
49
+
50
+ type := NewType(fam, filts);
51
+ fam!.type := type;
52
+
53
+ SetDualSemigroupOfFamily(fam, dual);
54
+ SetElementsFamily(FamilyObj(dual), fam);
55
+
56
+ if HasIsFinite(S) then
57
+ SetIsFinite(dual, IsFinite(S));
58
+ fi;
59
+
60
+ if IsTransformationSemigroup(S) then
61
+ map := AntiIsomorphismDualSemigroup(dual);
62
+ SetAntiIsomorphismTransformationSemigroup(dual, map);
63
+ fi;
64
+
65
+ if HasGeneratorsOfSemigroup(S) then
66
+ SetGeneratorsOfSemigroup(dual,
67
+ List(GeneratorsOfSemigroup(S),
68
+ x -> SEMIGROUPS.DualSemigroupElementNC(dual,
69
+ x)));
70
+ fi;
71
+
72
+ if HasGeneratorsOfMonoid(S) then
73
+ SetGeneratorsOfMonoid(dual,
74
+ List(GeneratorsOfMonoid(S),
75
+ x -> SEMIGROUPS.DualSemigroupElementNC(dual,
76
+ x)));
77
+ fi;
78
+ return dual;
79
+ end);
80
+
81
+ SEMIGROUPS.DualSemigroupElementNC := function(S, s)
82
+ if not IsDualSemigroupElement(s) then
83
+ return Objectify(ElementsFamily(FamilyObj(S))!.type, [s]);
84
+ fi;
85
+ return s![1];
86
+ end;
87
+
88
+ InstallMethod(AntiIsomorphismDualSemigroup, "for a semigroup",
89
+ [IsSemigroup],
90
+ function(S)
91
+ local dual, inv, iso;
92
+
93
+ dual := DualSemigroup(S);
94
+ iso := x -> SEMIGROUPS.DualSemigroupElementNC(dual, x);
95
+ inv := x -> SEMIGROUPS.DualSemigroupElementNC(S, x);
96
+ return MappingByFunction(S, dual, iso, inv);
97
+ end);
98
+
99
+ InstallGlobalFunction(UnderlyingElementOfDualSemigroupElement,
100
+ function(s)
101
+ if not IsDualSemigroupElement(s) then
102
+ ErrorNoReturn("the argument is not an element represented as a dual ",
103
+ "semigroup element");
104
+ fi;
105
+ return s![1];
106
+ end);
107
+
108
+ ################################################################################
109
+ ## Technical methods
110
+ ################################################################################
111
+
112
+ InstallMethod(OneMutable, "for a dual semigroup element",
113
+ [IsDualSemigroupElement and IsMultiplicativeElementWithOne],
114
+ function(s)
115
+ local S, x;
116
+ S := DualSemigroupOfFamily(FamilyObj(s));
117
+ x := SEMIGROUPS.DualSemigroupElementNC(DualSemigroup(S), s);
118
+ return SEMIGROUPS.DualSemigroupElementNC(S, OneMutable(x));
119
+ end);
120
+
121
+ InstallMethod(MultiplicativeNeutralElement, "for a dual semigroup",
122
+ [IsDualSemigroupRep],
123
+ 10, # add rank to beat enumeration methods
124
+ function(S)
125
+ local m;
126
+ m := MultiplicativeNeutralElement(DualSemigroup(S));
127
+ if m <> fail then
128
+ return SEMIGROUPS.DualSemigroupElementNC(S, m);
129
+ fi;
130
+ return fail;
131
+ end);
132
+
133
+ InstallMethod(Representative, "for a dual semigroup",
134
+ [IsDualSemigroupRep],
135
+ function(S)
136
+ if HasGeneratorsOfSemigroup(S) then
137
+ return GeneratorsOfSemigroup(S)[1];
138
+ fi;
139
+ return SEMIGROUPS.DualSemigroupElementNC(S, Representative(DualSemigroup(S)));
140
+ end);
141
+
142
+ InstallMethod(Size, "for a dual semigroup",
143
+ [IsDualSemigroupRep],
144
+ 10, # add rank to beat enumeration methods
145
+ S -> Size(DualSemigroup(S)));
146
+
147
+ InstallMethod(AsList, "for a dual semigroup",
148
+ [IsDualSemigroupRep],
149
+ 10, # add rank to beat enumeration methods
150
+ S -> List(DualSemigroup(S), s -> SEMIGROUPS.DualSemigroupElementNC(S, s)));
151
+
152
+ InstallMethod(\*, "for dual semigroup elements",
153
+ IsIdenticalObj,
154
+ [IsDualSemigroupElement, IsDualSemigroupElement],
155
+ {x, y} -> Objectify(FamilyObj(x)!.type, [y![1] * x![1]]));
156
+
157
+ InstallMethod(\=, "for dual semigroup elements",
158
+ IsIdenticalObj,
159
+ [IsDualSemigroupElement, IsDualSemigroupElement],
160
+ {x, y} -> x![1] = y![1]);
161
+
162
+ InstallMethod(\<, "for dual semigroup elements",
163
+ IsIdenticalObj,
164
+ [IsDualSemigroupElement, IsDualSemigroupElement],
165
+ {x, y} -> x![1] < y![1]);
166
+
167
+ InstallMethod(ViewObj, "for dual semigroup elements",
168
+ [IsDualSemigroupElement], PrintObj);
169
+
170
+ InstallMethod(PrintObj, "for dual semigroup elements",
171
+ [IsDualSemigroupElement],
172
+ function(x)
173
+ Print("<", ViewString(x![1]), " in the dual semigroup>");
174
+ end);
175
+
176
+ InstallMethod(ViewObj, "for a dual semigroup",
177
+ [IsDualSemigroupRep], PrintObj);
178
+
179
+ InstallMethod(PrintObj, "for a dual semigroup",
180
+ [IsDualSemigroupRep],
181
+ function(S)
182
+ Print("<dual semigroup of ",
183
+ ViewString(DualSemigroup(S)),
184
+ ">");
185
+ end);
186
+
187
+ # InstallMethod(ViewString, "for dual semigroup elements",
188
+ # [IsDualSemigroupElement], PrintString);
189
+ #
190
+ # InstallMethod(PrintString, "for dual semigroup elements",
191
+ # [IsDualSemigroupElement],
192
+ # x -> StringFormatted("<{!v} in the dual semigroup>", x![1]);
193
+ #
194
+ # InstallMethod(ViewString, "for a dual semigroup",
195
+ # [IsDualSemigroupRep], PrintString);
196
+ #
197
+ # InstallMethod(PrintString, "for a dual semigroup",
198
+ # [IsDualSemigroupRep],
199
+ # S -> StringFormatted("<dual semigroup of {!v}>", DualSemigroup(S));
200
+
201
+ InstallMethod(ChooseHashFunction, "for a dual semigroup element and int",
202
+ [IsDualSemigroupElement, IsInt],
203
+ function(x, data)
204
+ local H, hashfunc;
205
+
206
+ H := ChooseHashFunction(x![1], data);
207
+ hashfunc := {a, b} -> H.func(a![1], b);
208
+ return rec(func := hashfunc, data := H.data);
209
+ end);
@@ -0,0 +1,17 @@
1
+ ############################################################################
2
+ ##
3
+ ## attributes/factor.gd
4
+ ## Copyright (C) 2013-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ DeclareOperation("MinimalFactorization",
12
+ [IsSemigroup, IsMultiplicativeElement]);
13
+ DeclareOperation("NonTrivialFactorization",
14
+ [IsSemigroup, IsMultiplicativeElement]);
15
+ DeclareOperation("Factorization", [IsLambdaOrb, IsPosInt, IsPerm]);
16
+ DeclareOperation("Factorization", [IsSemigroup, IsMultiplicativeElement]);
17
+ DeclareOperation("TraceSchreierTreeForward", [IsSemigroupData, IsPosInt]);
@@ -0,0 +1,453 @@
1
+ #############################################################################
2
+ ##
3
+ ## attributes/factor.gi
4
+ ## Copyright (C) 2013-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ # This file contains methods relating to factorising elements of a semigroup
12
+ # over its generators.
13
+
14
+ # this is declared in the library, but there is no method for semigroups in the
15
+ # library.
16
+
17
+ InstallMethod(Factorization,
18
+ "for semigroup with CanUseFroidurePin and multiplicative element",
19
+ [IsSemigroup and CanUseFroidurePin, IsMultiplicativeElement],
20
+ MinimalFactorization);
21
+
22
+ InstallMethod(NonTrivialFactorization,
23
+ "for semigroup with CanUseFroidurePin and multiplicative element",
24
+ [IsSemigroup and CanUseFroidurePin, IsMultiplicativeElement],
25
+ function(S, x)
26
+ local gens, pos, gr, verts, i, j, y;
27
+
28
+ if not x in S then
29
+ ErrorNoReturn("the 2nd argument (a mult. elt.) must belong to the ",
30
+ "1st argument (a semigroup)");
31
+ elif HasIndecomposableElements(S)
32
+ and x in IndecomposableElements(S) then
33
+ return fail;
34
+ fi;
35
+
36
+ # if <x> is not a generator of <S>, then any factorization is non-trivial
37
+ gens := GeneratorsOfSemigroup(S);
38
+ pos := Position(gens, x);
39
+ if pos = fail then
40
+ return Factorization(S, x);
41
+ elif IsIdempotent(x) then
42
+ return [pos, pos];
43
+ fi;
44
+
45
+ pos := PositionCanonical(S, x);
46
+ gr := RightCayleyDigraph(S);
47
+ verts := InNeighboursOfVertex(gr, pos);
48
+ if IsEmpty(verts) then
49
+ return fail;
50
+ fi;
51
+ i := verts[1];
52
+ j := Position(OutNeighboursOfVertex(gr, i), pos);
53
+ y := EnumeratorCanonical(S)[i];
54
+ return Concatenation(MinimalFactorization(S, y), [j]);
55
+ end);
56
+
57
+ InstallMethod(NonTrivialFactorization,
58
+ "for an acting semigroup with generators and multiplicative element",
59
+ [IsActingSemigroup and HasGeneratorsOfSemigroup, IsMultiplicativeElement],
60
+ function(S, x)
61
+ local factorization, id, gens, data, pos, graph, j, i;
62
+
63
+ if not x in S then
64
+ ErrorNoReturn("the 2nd argument (a mult. elt.) must belong to the ",
65
+ "1st argument (a semigroup)");
66
+ elif HasIndecomposableElements(S)
67
+ and x in IndecomposableElements(S) then
68
+ return fail;
69
+ fi;
70
+
71
+ factorization := Factorization(S, x);
72
+ if not IsTrivial(factorization) then
73
+ return factorization;
74
+ fi;
75
+
76
+ # Attempt to find a right identity for x.
77
+ id := RightIdentity(S, x);
78
+ if id <> fail then
79
+ return Concatenation(factorization, Factorization(S, id));
80
+ fi;
81
+
82
+ # {x} is a non-reg trivial R-class.
83
+ Assert(1, IsTrivial(RClass(S, x)) and not IsRegularGreensClass(RClass(S, x)));
84
+
85
+ # Attempt to find a left identity for x.
86
+ id := LeftIdentity(S, x);
87
+ if id <> fail then
88
+ return Concatenation(Factorization(S, id), factorization);
89
+ fi;
90
+
91
+ # {x} is a non-reg trivial D-class. Either {x} is maximal or <x> is redundant.
92
+ Assert(1, IsTrivial(DClass(S, x)) and not IsRegularDClass(DClass(S, x)));
93
+
94
+ # If <x> is redundant, we can decompose <x> as a left multiple of some other
95
+ # R-class rep of the semigroup
96
+ gens := GeneratorsOfSemigroup(S);
97
+ data := SemigroupData(S);
98
+ Enumerate(data);
99
+ pos := Position(data, x);
100
+ graph := OrbitGraph(data);
101
+ for j in [2 .. Length(data)] do
102
+ for i in [1 .. Length(gens)] do
103
+ if graph[j][i] = pos then
104
+ # x = gens[i] * RClassReps(S)[j - 1].
105
+ return Concatenation([i], Factorization(S, data[j][4]));
106
+ fi;
107
+ od;
108
+ od;
109
+
110
+ # {x} is a maximal D-class and is therefore an indecomposable element.
111
+ return fail;
112
+ end);
113
+
114
+ InstallMethod(NonTrivialFactorization,
115
+ "for an acting inverse semigroup rep with generators and element",
116
+ [IsInverseActingSemigroupRep and HasGeneratorsOfSemigroup,
117
+ IsMultiplicativeElement],
118
+ function(S, x)
119
+ local pos;
120
+
121
+ if not x in S then
122
+ ErrorNoReturn("the 2nd argument (a mult. elt.) must belong to the ",
123
+ "1st argument (a semigroup)");
124
+ fi;
125
+ pos := Position(GeneratorsOfSemigroup(S), x);
126
+ if pos = fail then
127
+ return Factorization(S, x);
128
+ fi;
129
+ return [pos, -pos, pos];
130
+ end);
131
+
132
+ # factorisation of Schutzenberger group element, the same method works for
133
+ # ideals
134
+
135
+ InstallMethod(Factorization, "for a lambda orbit, scc index, and perm",
136
+ [IsLambdaOrb, IsPosInt, IsPerm],
137
+ function(o, m, p)
138
+ local gens, scc, lookup, orbitgraph, genstoapply, lambdaperm, rep, bound, G,
139
+ factors, nr, stop, uword, u, adj, vword, v, x, iso, word, epi, out, k, l, i;
140
+
141
+ if not IsBound(o!.factors) then
142
+ o!.factors := [];
143
+ o!.factorgroups := [];
144
+ fi;
145
+
146
+ if not IsBound(o!.factors[m]) then
147
+ gens := o!.gens;
148
+ scc := OrbSCC(o)[m];
149
+ lookup := o!.scc_lookup;
150
+ orbitgraph := OrbitGraph(o);
151
+ genstoapply := [1 .. Length(gens)];
152
+ lambdaperm := LambdaPerm(o!.parent);
153
+ rep := LambdaOrbRep(o, m);
154
+ bound := Size(LambdaOrbSchutzGp(o, m));
155
+
156
+ G := Group(());
157
+ factors := [];
158
+ nr := 0;
159
+ stop := false;
160
+
161
+ for k in scc do
162
+ uword := TraceSchreierTreeOfSCCForward(o, m, k);
163
+ u := EvaluateWord(o, uword);
164
+ adj := orbitgraph[k];
165
+
166
+ for l in genstoapply do
167
+ if IsBound(adj[l]) and lookup[adj[l]] = m then
168
+ vword := TraceSchreierTreeOfSCCBack(o, m, adj[l]);
169
+ v := EvaluateWord(o, vword);
170
+ x := lambdaperm(rep, rep * u * gens[l] * v);
171
+ if bound = 1 or not x in G then
172
+ G := ClosureGroup(G, x);
173
+ nr := nr + 1;
174
+ factors[nr] := Concatenation(uword, [l], vword);
175
+ if Size(G) = bound then
176
+ stop := true;
177
+ break;
178
+ fi;
179
+ fi;
180
+ fi;
181
+ od;
182
+ if stop then
183
+ break;
184
+ fi;
185
+ od;
186
+ o!.factors[m] := factors;
187
+ o!.factorgroups[m] := G;
188
+ else
189
+ factors := o!.factors[m];
190
+ G := o!.factorgroups[m];
191
+ fi;
192
+
193
+ if not p in G then
194
+ ErrorNoReturn("the 3rd argument <p> does not belong to the ",
195
+ "Schutzenberger group");
196
+ elif IsEmpty(factors) then
197
+ # No elt of the semigroup stabilizes the relevant lambda value. Therefore
198
+ # the Schutzenberger group is trivial, and corresponds to the action of an
199
+ # adjoined identity. No element of the semigroup acts like <p> = ().
200
+ return fail;
201
+ fi;
202
+
203
+ # express <elt> as a word in the generators of the Schutzenberger group
204
+ if (not IsInverseActingSemigroupRep(o!.parent)) and Size(G) <= 1024 then
205
+ iso := IsomorphismTransformationSemigroup(G);
206
+ word := MinimalFactorization(Range(iso), p ^ iso);
207
+ else
208
+ # Note that in this case the word potentially contains inverses of
209
+ # generators and we do not have a good way, in general, of finding words in
210
+ # the original generators of the semigroup that equal the inverse of a
211
+ # generator of the Schutzenberger group.
212
+ if p = () then
213
+ # When p = (), LetterRepAssocWord gives the empty word. The case p = () is
214
+ # only used by NonTrivialFactorization, which requires a non-empty word.
215
+ # Return [k, -k] (i.e. kk^-1), where k is gen with smallest order in G.
216
+ v := infinity;
217
+ for i in [1 .. Length(GeneratorsOfGroup(G))] do
218
+ x := Order(G.(i));
219
+ if x < v then
220
+ k := i;
221
+ v := x;
222
+ fi;
223
+ od;
224
+ word := [k, -k];
225
+ else
226
+ epi := EpimorphismFromFreeGroup(G);
227
+ word := LetterRepAssocWord(PreImagesRepresentativeNC(epi, p));
228
+ fi;
229
+ fi;
230
+
231
+ # convert group generators to semigroup generators
232
+ out := [];
233
+ for i in word do
234
+ if i > 0 then
235
+ Append(out, factors[i]);
236
+ elif IsInverseActingSemigroupRep(o!.parent) then
237
+ Append(out, Reversed(factors[-i]) * -1);
238
+ else
239
+ Append(out, Concatenation(List([1 .. Order(G.(-i)) - 1],
240
+ x -> factors[-i])));
241
+ fi;
242
+ od;
243
+ return out;
244
+ end);
245
+
246
+ # returns a word in the generators of the parent of <data> equal to the R-class
247
+ # representative stored in <data!.orbit[pos]>.
248
+
249
+ # Notes: the code is more complicated than you might think since the R-class
250
+ # reps are obtained from earlier reps by left multiplication but the orbit
251
+ # multipliers correspond to right multiplication.
252
+
253
+ # This method does not work for ideals!
254
+
255
+ InstallMethod(TraceSchreierTreeForward, "for semigroup data and pos int",
256
+ [IsSemigroupData, IsPosInt],
257
+ function(data, pos)
258
+ local word1, word2, schreiergen, schreierpos, schreiermult, orb;
259
+
260
+ word1 := []; # the word obtained by tracing schreierpos and schreiergen
261
+ # (left multiplication)
262
+ word2 := []; # the word corresponding to multipliers applied (if any)
263
+ # (right multiplication)
264
+
265
+ schreiergen := data!.schreiergen;
266
+ schreierpos := data!.schreierpos;
267
+ schreiermult := data!.schreiermult;
268
+
269
+ orb := data!.orbit;
270
+
271
+ while pos > 1 do
272
+ Add(word1, schreiergen[pos]);
273
+ Append(word2,
274
+ Reversed(TraceSchreierTreeOfSCCBack(orb[pos][3],
275
+ orb[pos][2],
276
+ schreiermult[pos])));
277
+ pos := schreierpos[pos];
278
+ od;
279
+
280
+ Append(word1, Reversed(word2));
281
+ return word1;
282
+ end);
283
+
284
+ InstallMethod(Factorization,
285
+ "for an acting semigroup with generators and element",
286
+ [IsActingSemigroup and HasGeneratorsOfSemigroup, IsMultiplicativeElement],
287
+ function(S, x)
288
+ local pos, o, l, m, scc, data, rep, word1, word2, p;
289
+
290
+ if not x in S then
291
+ ErrorNoReturn("the 2nd argument (a mult. elt.) must belong to the ",
292
+ "1st argument (a semigroup)");
293
+ else
294
+ pos := Position(S, x); # position in the current data structure if any
295
+ if pos <> fail then
296
+ return MinimalFactorization(S, x);
297
+ fi;
298
+ fi;
299
+
300
+ o := Enumerate(LambdaOrb(S));
301
+ l := Position(o, LambdaFunc(S)(x));
302
+ m := OrbSCCLookup(o)[l];
303
+ scc := OrbSCC(o)[m];
304
+
305
+ data := SemigroupData(S);
306
+ pos := Position(data, x); # Not <fail> since <f> in <s>
307
+ rep := data[pos][4]; # rep of R-class of <f>
308
+
309
+ word1 := TraceSchreierTreeForward(data, pos); # A word equal to <rep>
310
+
311
+ # Compensate for the action of the multipliers, if necessary
312
+ if l <> scc[1] then
313
+ word2 := TraceSchreierTreeOfSCCForward(o, m, l);
314
+ p := LambdaPerm(S)(rep, x *
315
+ LambdaInverse(S)(o[scc[1]],
316
+ EvaluateWord(o!.gens, word2)));
317
+ else
318
+ word2 := [];
319
+ p := LambdaPerm(S)(rep, x);
320
+ fi;
321
+
322
+ if IsOne(p) then
323
+ # No need to factorise <p>
324
+ Append(word1, word2);
325
+ return word1;
326
+ fi;
327
+
328
+ # factorize the group element <p> over the generators of <s>
329
+ Append(word1, Factorization(o, m, p));
330
+ Append(word1, word2);
331
+
332
+ return word1;
333
+ end);
334
+
335
+ InstallMethod(Factorization,
336
+ "for an acting inverse semigroup rep with generators and element",
337
+ IsCollsElms,
338
+ [IsInverseActingSemigroupRep and HasGeneratorsOfSemigroup,
339
+ IsMultiplicativeElement],
340
+ function(S, x)
341
+ local pos, o, gens, l, m, scc, word1, k, rep, word2, p;
342
+
343
+ if not x in S then
344
+ ErrorNoReturn("the 2nd argument (a mult. elt.) must belong to the ",
345
+ "1st argument (a semigroup)");
346
+ else
347
+ pos := Position(S, x); # position in the current data structure if any
348
+ if pos <> fail then
349
+ return MinimalFactorization(S, x);
350
+ fi;
351
+ fi;
352
+
353
+ o := LambdaOrb(S);
354
+ gens := o!.gens;
355
+ l := Position(o, LambdaFunc(S)(x));
356
+ m := OrbSCCLookup(o)[l];
357
+ scc := OrbSCC(o)[m];
358
+
359
+ # find the R-class rep
360
+ word1 := TraceSchreierTreeForward(o, scc[1]);
361
+ # lambda value is ok, but rho value is wrong
362
+ k := Position(o, RhoFunc(S)(EvaluateWord(gens, word1)));
363
+ # take rho value of <word1> back to 1st position in scc
364
+ word1 := Concatenation(TraceSchreierTreeOfSCCForward(o, m, k), word1);
365
+
366
+ # take rho value of <word1> forwards to rho value of <f>
367
+ k := Position(o, RhoFunc(S)(x));
368
+ word1 := Concatenation(TraceSchreierTreeOfSCCBack(o, m, k), word1);
369
+ # <rep> is an R-class rep for the R-class of <f>
370
+ rep := EvaluateWord(gens, word1);
371
+
372
+ # compensate for the action of the multipliers
373
+ if l <> scc[1] then
374
+ word2 := TraceSchreierTreeOfSCCForward(o, m, l);
375
+ p := LambdaPerm(S)(rep, x *
376
+ LambdaInverse(S)(o[scc[1]], EvaluateWord(gens, word2)));
377
+ else
378
+ word2 := [];
379
+ p := LambdaPerm(S)(rep, x);
380
+ fi;
381
+
382
+ if IsOne(p) then
383
+ Append(word1, word2);
384
+ return word1;
385
+ fi;
386
+
387
+ # factorize the group element <p> over the generators of <s>
388
+ Append(word1, Factorization(o, m, p));
389
+ Append(word1, word2);
390
+
391
+ return word1;
392
+ end);
393
+
394
+ InstallMethod(Factorization,
395
+ "for a regular acting semigroup with generators and element",
396
+ [IsActingSemigroup and IsRegularSemigroup and HasGeneratorsOfSemigroup,
397
+ IsMultiplicativeElement],
398
+ function(S, x)
399
+ local pos, o, gens, l, word1, rep, m, scc, k, word2, p;
400
+
401
+ if not x in S then
402
+ ErrorNoReturn("the 2nd argument (a mult. elt.) must belong to the ",
403
+ "1st argument (a semigroup)");
404
+ else
405
+ pos := Position(S, x); # position in the current data structure if any
406
+ if pos <> fail then
407
+ return MinimalFactorization(S, x);
408
+ fi;
409
+ fi;
410
+
411
+ o := RhoOrb(S);
412
+ Enumerate(o);
413
+ gens := o!.gens;
414
+ l := Position(o, RhoFunc(S)(x));
415
+
416
+ # find the R-class rep
417
+ word1 := TraceSchreierTreeBack(o, l);
418
+ # rho value is ok but lambda value is wrong
419
+ # trace back to get forward since this is a left orbit
420
+ rep := EvaluateWord(gens, word1);
421
+
422
+ o := LambdaOrb(S);
423
+ Enumerate(o);
424
+ l := Position(o, LambdaFunc(S)(x));
425
+ m := OrbSCCLookup(o)[l];
426
+ scc := OrbSCC(o)[m];
427
+
428
+ k := Position(o, LambdaFunc(S)(rep));
429
+ word2 := TraceSchreierTreeOfSCCBack(o, m, k);
430
+ rep := rep * EvaluateWord(gens, word2); # the R-class rep of the R-class of f
431
+ Append(word1, word2); # and this word equals rep
432
+
433
+ # compensate for the action of the multipliers
434
+ if l <> scc[1] then
435
+ word2 := TraceSchreierTreeOfSCCForward(o, m, l);
436
+ p := LambdaPerm(S)(rep, x *
437
+ LambdaInverse(S)(o[scc[1]], EvaluateWord(gens, word2)));
438
+ else
439
+ word2 := [];
440
+ p := LambdaPerm(S)(rep, x);
441
+ fi;
442
+
443
+ if IsOne(p) then
444
+ Append(word1, word2);
445
+ return word1;
446
+ fi;
447
+
448
+ # factorize the group element <p> over the generators of <s>
449
+ Append(word1, Factorization(o, m, p));
450
+ Append(word1, word2);
451
+
452
+ return word1;
453
+ end);