passagemath-gap-pkg-semigroups 10.6.30__cp310-cp310-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.cpython-310-darwin.so +0 -0
@@ -0,0 +1,13 @@
1
+ #############################################################################
2
+ ##
3
+ ## semigroups/semidp.gd
4
+ ## Copyright (C) 2017-2022 Wilf A. Wilson
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ # This file contains methods for creating direct products of semigroups
12
+
13
+ DeclareAttribute("SemigroupDirectProductInfo", IsSemigroup, "mutable");
@@ -0,0 +1,509 @@
1
+ #############################################################################
2
+ ##
3
+ ## semigroups/semidp.gi
4
+ ## Copyright (C) 2017-2022 Wilf A. Wilson
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ ### degreefunc := function(semigroup)
12
+ # Takes a semigroup and returns its degree.
13
+ #
14
+ ### convert := function(element, degree, offset)
15
+ # Takes an element, the degree of the semigroup it belongs to, and an offset
16
+ # to say by how much to "increase" the values in its representation.
17
+ # The function then returns an object representing this offset element,
18
+ # in a form that is readily used by the following <combine> function.
19
+ #
20
+ ### combine := function(list)
21
+ # Takes a list of elements in the form given by <convert>, and forms the
22
+ # corresponding direct product element.
23
+ #
24
+ ### restrict := function(element, i, j)
25
+ # (Is used to compute the projections from the product onto its factors).
26
+ # Takes an element, and two integers i and j. The function then returns the
27
+ # restriction of then element corresponding to its "action" on [i + 1 .. i + j].
28
+ # It's kind of the inverse of convert & combine.
29
+
30
+ # See DirectProductOp for transformation semigroups or bipartition semigroups
31
+ # for examples of how to use SEMIGROUPS.DirectProductOp.
32
+
33
+ # TODO(later): add reference to a description & proof of this algorithm, when
34
+ # possible.
35
+
36
+ SEMIGROUPS.DirectProductOp := function(S, degree, convert, combine, restrict)
37
+ local f, create, n, gens_old, gens_new, indecomp, pre_mult, pos_mult, out,
38
+ degrees, offsets, idems, idem, factorization, y, len, w, hasindecomp, elt, p,
39
+ x, indecomp_out, D, embedding, projection, i, choice;
40
+
41
+ if not IsList(S) or IsEmpty(S) then
42
+ ErrorNoReturn("the 1st argument is not a non-empty list");
43
+ elif ForAll(S, HasGeneratorsOfInverseMonoid) then
44
+ f := GeneratorsOfInverseMonoid;
45
+ create := InverseMonoid;
46
+ elif ForAll(S, IsMonoid) then
47
+ f := GeneratorsOfMonoid;
48
+ create := Monoid;
49
+ else
50
+ f := GeneratorsOfSemigroup;
51
+ create := Semigroup;
52
+ fi;
53
+
54
+ n := Length(S);
55
+ gens_old := List(S, f);
56
+ gens_new := List([1 .. n], i -> []);
57
+ indecomp := List([1 .. n], i -> []);
58
+ pre_mult := List([1 .. n], i -> []);
59
+ pos_mult := List([1 .. n], i -> []);
60
+ out := [];
61
+
62
+ # The semigroup <S[i]> has degree <degrees[i]>.
63
+ # In the product, we "offset" the representation of <S[i]> by <offsets[i]>.
64
+ # eg. if <S[i]> is a transformation semigroup on [1 .. m], then in the product
65
+ # it is imagined as a transformation semigroup on [1 + offset .. m + offset].
66
+ #
67
+ # This way, the representations are "disjoint", and so the "union" of the
68
+ # representations of all the factors gives a representation of the product.
69
+ degrees := List(S, degree);
70
+ offsets := [0];
71
+ for i in [2 .. n] do
72
+ offsets[i] := offsets[i - 1] + degrees[i - 1];
73
+ od;
74
+
75
+ # To create the embeddings of each factor into the product, we require an
76
+ # idempotent from each factor. For the monoids, we take its identity.
77
+ # Otherwise, we select an arbitrary idempotent from the minimal ideal, simply
78
+ # because it is probably an efficient way to come up with a single idempotent.
79
+ idems := EmptyPlist(n);
80
+ for i in [1 .. n] do
81
+ idem := MultiplicativeNeutralElement(S[i]);
82
+ if idem = fail then
83
+ idem := MultiplicativeNeutralElement(GroupHClass(MinimalDClass(S[i])));
84
+ fi;
85
+ idems[i] := convert(idem, degrees[i], offsets[i]);
86
+ od;
87
+
88
+ # For each factor <i> and for each generator <x> in <gens_old[i]>, either <x>
89
+ # is indecomposable, or we may find a non-trivial factorization of <x>, and
90
+ # hence express <x> as a product <x = pre_mult * x'> and <x = x'' * pos_mult>,
91
+ # for some generators <x'> and <x''> in <gens_old[i]>, and for some elements
92
+ # <pre_mult> and <pos_mult> in <S[i]>.
93
+ #
94
+ # We want to record which case happens, and in the second case, get our hands
95
+ # on the relevant elements, and store them in <pre_mult[i]> and <pos_mult[i]>,
96
+ # as appropriate.
97
+ for i in [1 .. n] do
98
+ if IsMonoidAsSemigroup(S[i]) then
99
+ # For a monoid, every generator is decomposable. Simply convert each gen,
100
+ # and use the identity as the pre_mult and pos_mult of each gen.
101
+ for x in gens_old[i] do
102
+ AddSet(gens_new[i], convert(x, degrees[i], offsets[i]));
103
+ od;
104
+ # Remember that idems[i] = MultiplicativeNeutralElement(S[i]).
105
+ AddSet(pre_mult[i], idems[i]);
106
+ AddSet(pos_mult[i], idems[i]);
107
+ else
108
+ for x in gens_old[i] do
109
+ # Attempt to find a non-trivial factorization of <x>.
110
+ factorization := NonTrivialFactorization(S[i], x);
111
+ y := convert(x, degrees[i], offsets[i]);
112
+ if factorization = fail then
113
+ # <x> is indecomposable; record it as such.
114
+ AddSet(indecomp[i], y);
115
+ else
116
+ # We can decompose <x>, so we can find a <pre_mult> and <pos_mult>.
117
+ AddSet(gens_new[i], y);
118
+ len := Length(factorization);
119
+ if i > 1 then
120
+ # <pos_mult>s are not needed for the first factor
121
+ w := EvaluateWord(gens_old[i], factorization{[1 .. len - 1]});
122
+ AddSet(pre_mult[i], convert(w, degrees[i], offsets[i]));
123
+ fi;
124
+ if i < n then
125
+ # <pre_mult>s are not needed for the final factor
126
+ w := EvaluateWord(gens_old[i], factorization{[2 .. len]});
127
+ AddSet(pos_mult[i], convert(w, degrees[i], offsets[i]));
128
+ fi;
129
+ fi;
130
+ od;
131
+ fi;
132
+ od;
133
+
134
+ # Each indecomposable element of <S[i]> has to appear as a generator of the
135
+ # product with every possible combination of elements from the other factors.
136
+ hasindecomp := Filtered([1 .. n], i -> not IsEmpty(indecomp[i]));
137
+ if not IsEmpty(hasindecomp) then
138
+ elt := EmptyPlist(n);
139
+ for i in [1 .. n] do
140
+ # For each factor <i> with indecomposable elements, we are required to
141
+ # get the Elements of all the other factors. If <i> is unique we do not
142
+ # need to enumerate <S[i]>; otherwise, we must enumerate *every* factor.
143
+ if hasindecomp <> [i] then
144
+ elt[i] := List(Elements(S[i]), x -> convert(x, degrees[i], offsets[i]));
145
+ fi;
146
+ od;
147
+ for i in hasindecomp do
148
+ # For each factor <i> with indecomposable elements, and for each indecomp
149
+ # generators <x>, we create the generator of the product that corresponds
150
+ # to <x> with all possible combinations of other elements from the other
151
+ # factors.
152
+ #
153
+ # This appears more complicated than necessary because of partial perms.
154
+ p := List([1 .. i - 1], j -> [1 .. Length(elt[j])]);
155
+ Add(p, [1 .. Length(indecomp[i])]);
156
+ Append(p, List([i + 1 .. n], j -> [1 .. Length(elt[j])]));
157
+ for choice in IteratorOfCartesianProduct(p) do
158
+ # choice[j]: we are choosing <elt[j][choice[j]]> to be the element from
159
+ # the <j>^th factor, to appear with...
160
+ # choice[i]: we are choosing <indecomp[i][choice[i]]>, the
161
+ # <choice[i]>^th indecomposable gen of the <i>^th factor.
162
+ x := Concatenation(List([1 .. i - 1], j -> elt[j][choice[j]]),
163
+ [indecomp[i][choice[i]]],
164
+ List([i + 1 .. n], j -> elt[j][choice[j]]));
165
+ AddSet(out, combine(x));
166
+ od;
167
+ od;
168
+ fi;
169
+
170
+ # The indecomposable elements of the produdct are precisely those generators
171
+ # that we have already created. The product has indecomposable elements if and
172
+ # only if any factor has indecomposable elements; the indecomposable elements
173
+ # of the product are those such that the i^th projection of the element is
174
+ # indecomposable, for some factor <i>.
175
+ indecomp_out := ShallowCopy(out);
176
+
177
+ # Each decomposable generator of <S[i]> will appear as a generator of the
178
+ # product with every pos_mult in the j^th factor (j < i), and every pre_mult
179
+ # in the k^th factor (k > i). (These strict inequalities are why we do not
180
+ # require <pos_mult>s for the first factor, or <pre_mult>s for the final
181
+ # factor.)
182
+ #
183
+ # If any <gens_new[i]> is empty, then no such generators can be created, and
184
+ # so we skip this step.
185
+ if not ForAny(gens_new, IsEmpty) then
186
+ for i in [1 .. n] do
187
+ # Again, this appears more complicated than it should.
188
+ p := Concatenation(List([1 .. i - 1], j -> [1 .. Length(pos_mult[j])]),
189
+ [[1 .. Length(gens_new[i])]],
190
+ List([i + 1 .. n], j -> [1 .. Length(pre_mult[j])]));
191
+ for choice in IteratorOfCartesianProduct(p) do
192
+ x := Concatenation(List([1 .. i - 1], j -> pos_mult[j][choice[j]]),
193
+ [gens_new[i][choice[i]]],
194
+ List([i + 1 .. n], j -> pre_mult[j][choice[j]]));
195
+ AddSet(out, combine(x));
196
+ od;
197
+ od;
198
+ fi;
199
+
200
+ D := create(out);
201
+ SetIndecomposableElements(D, indecomp_out);
202
+ SetIsSurjectiveSemigroup(D, IsEmpty(indecomp_out));
203
+ if ForAny(gens_new, IsEmpty) then
204
+ SetMinimalSemigroupGeneratingSet(D, indecomp_out);
205
+ fi;
206
+
207
+ # Store information to be able to construct embeddings and projections
208
+ embedding := function(x, i)
209
+ return combine(Concatenation(idems{[1 .. i - 1]},
210
+ [convert(x, degrees[i], offsets[i])],
211
+ idems{[i + 1 .. n]}));
212
+ end;
213
+ projection := {x, i} -> restrict(x, offsets[i], degrees[i]);
214
+ SetSemigroupDirectProductInfo(D, rec(factors := S,
215
+ nrfactors := n,
216
+ embedding := embedding,
217
+ embeddings := [],
218
+ projection := projection,
219
+ projections := []));
220
+ return D;
221
+ end;
222
+
223
+ # Transformation semigroups
224
+
225
+ InstallMethod(DirectProductOp, "for a list and a transformation semigroup",
226
+ [IsList, IsTransformationSemigroup],
227
+ function(list, S)
228
+ local combine, convert, restrict;
229
+
230
+ if IsEmpty(list) then
231
+ ErrorNoReturn("the 1st argument (a list) is not non-empty");
232
+ elif not ForAny(list, T -> IsIdenticalObj(S, T)) then
233
+ ErrorNoReturn("the 2nd argument is not one of the semigroups ",
234
+ "contained in the 1st argument (a list)");
235
+ elif not ForAll(list, IsTransformationSemigroup) then
236
+ TryNextMethod();
237
+ fi;
238
+
239
+ combine := x -> Transformation(Concatenation(x));
240
+ convert := {element, degree, offset} ->
241
+ ImageListOfTransformation(element, degree) + offset;
242
+ restrict := function(element, offset, degree)
243
+ local im;
244
+ im := ImageListOfTransformation(element, offset + degree);
245
+ return Transformation(im{[offset + 1 .. offset + degree]} - offset);
246
+ end;
247
+ return SEMIGROUPS.DirectProductOp(list, DegreeOfTransformationSemigroup,
248
+ convert, combine, restrict);
249
+ end);
250
+
251
+ # Partial perm semigroups
252
+
253
+ InstallMethod(DirectProductOp, "for a list and a partial perm semigroup",
254
+ [IsList, IsPartialPermSemigroup],
255
+ function(list, S)
256
+ local degree, combine, convert, restrict;
257
+
258
+ if IsEmpty(list) then
259
+ ErrorNoReturn("the 1st argument (a list) is not non-empty");
260
+ elif not ForAny(list, T -> IsIdenticalObj(S, T)) then
261
+ ErrorNoReturn("the 2nd argument is not one of the semigroups ",
262
+ "contained in the 1st argument (a list)");
263
+ elif not ForAll(list, IsPartialPermSemigroup) then
264
+ TryNextMethod();
265
+ fi;
266
+
267
+ degree := S -> Maximum(DegreeOfPartialPermSemigroup(S),
268
+ CodegreeOfPartialPermSemigroup(S));
269
+ combine := x -> PartialPerm(Concatenation(List(x, y -> y[1])),
270
+ Concatenation(List(x, y -> y[2])));
271
+ convert := function(element, _, offset)
272
+ return [DomainOfPartialPerm(element) + offset,
273
+ ImageListOfPartialPerm(element) + offset];
274
+ end;
275
+ restrict := function(element, offset, degree)
276
+ local dom, start, stop, ran;
277
+ dom := DomainOfPartialPerm(element);
278
+ start := PositionSorted(dom, offset + 1);
279
+ stop := PositionSorted(dom, offset + degree);
280
+ if stop = Length(dom) + 1 or dom[stop] <> offset + degree then
281
+ stop := stop - 1;
282
+ fi;
283
+ dom := dom{[start .. stop]} - offset;
284
+ ran := ImageListOfPartialPerm(element){[start .. stop]} - offset;
285
+ return PartialPerm(dom, ran);
286
+ end;
287
+ return SEMIGROUPS.DirectProductOp(list, degree, convert, combine, restrict);
288
+ end);
289
+
290
+ # Bipartition semigroups
291
+
292
+ InstallMethod(DirectProductOp, "for a list and a bipartition semigroup",
293
+ [IsList, IsBipartitionSemigroup],
294
+ function(list, S)
295
+ local combine, convert, restrict;
296
+
297
+ if IsEmpty(list) then
298
+ ErrorNoReturn("the 1st argument (a list) is not non-empty");
299
+ elif not ForAny(list, T -> IsIdenticalObj(S, T)) then
300
+ ErrorNoReturn("the 2nd argument is not one of the semigroups ",
301
+ "contained in the 1st argument (a list)");
302
+ elif not ForAll(list, IsBipartitionSemigroup) then
303
+ TryNextMethod();
304
+ fi;
305
+
306
+ combine := x -> Bipartition(Concatenation(x));
307
+ convert := function(element, _, offset)
308
+ local x, i, j;
309
+ x := List(ExtRepOfObj(element), ShallowCopy);
310
+ for i in [1 .. Length(x)] do
311
+ for j in [1 .. Length(x[i])] do
312
+ if IsPosInt(x[i][j]) then
313
+ x[i][j] := x[i][j] + offset;
314
+ else
315
+ x[i][j] := x[i][j] - offset;
316
+ fi;
317
+ od;
318
+ od;
319
+ return x;
320
+ end;
321
+ restrict := function(element, offset, degree)
322
+ local new_bipartition, new_block, old_block, x;
323
+ new_bipartition := [];
324
+ for old_block in ExtRepOfObj(element) do
325
+ if AbsInt(old_block[1]) in [offset + 1 .. offset + degree] then
326
+ new_block := [];
327
+ for x in old_block do
328
+ if IsPosInt(x) then
329
+ Add(new_block, x - offset);
330
+ else
331
+ Add(new_block, x + offset);
332
+ fi;
333
+ od;
334
+ Add(new_bipartition, new_block);
335
+ fi;
336
+ od;
337
+ return Bipartition(new_bipartition);
338
+ end;
339
+ return SEMIGROUPS.DirectProductOp(list,
340
+ DegreeOfBipartitionSemigroup,
341
+ convert,
342
+ combine,
343
+ restrict);
344
+ end);
345
+
346
+ # PBR semigroups
347
+
348
+ InstallMethod(DirectProductOp, "for a list and a pbr semigroup",
349
+ [IsList, IsPBRSemigroup],
350
+ function(list, S)
351
+ local combine, convert, restrict;
352
+
353
+ if IsEmpty(list) then
354
+ ErrorNoReturn("the 1st argument (a list) is not non-empty");
355
+ elif not ForAny(list, T -> IsIdenticalObj(S, T)) then
356
+ ErrorNoReturn("the 2nd argument is not one of the semigroups ",
357
+ "contained in the 1st argument (a list)");
358
+ elif not ForAll(list, IsPBRSemigroup) then
359
+ TryNextMethod();
360
+ fi;
361
+
362
+ combine := x -> PBR(Concatenation(List(x, y -> y[1])),
363
+ Concatenation(List(x, y -> y[2])));
364
+ convert := function(element, degree, offset)
365
+ local x, i, j, k;
366
+ x := ShallowCopy(ExtRepOfObj(element));
367
+ for k in [1, 2] do
368
+ for i in [1 .. degree] do
369
+ for j in [1 .. Length(x[k][i])] do
370
+ if IsPosInt(x[k][i][j]) then
371
+ x[k][i][j] := x[k][i][j] + offset;
372
+ else
373
+ x[k][i][j] := x[k][i][j] - offset;
374
+ fi;
375
+ od;
376
+ od;
377
+ od;
378
+ return x;
379
+ end;
380
+ restrict := function(element, offset, degree)
381
+ local x, k, i, j;
382
+ x := [ExtRepOfObj(element)[1]{[offset + 1 .. offset + degree]},
383
+ ExtRepOfObj(element)[2]{[offset + 1 .. offset + degree]}];
384
+ for k in [1, 2] do
385
+ for i in [1 .. degree] do
386
+ for j in [1 .. Length(x[k][i])] do
387
+ if IsPosInt(x[k][i][j]) then
388
+ x[k][i][j] := x[k][i][j] - offset;
389
+ else
390
+ x[k][i][j] := x[k][i][j] + offset;
391
+ fi;
392
+ od;
393
+ od;
394
+ od;
395
+ return PBR(x[1], x[2]);
396
+ end;
397
+ return SEMIGROUPS.DirectProductOp(list, DegreeOfPBRSemigroup, convert,
398
+ combine, restrict);
399
+ end);
400
+
401
+ # Other types of semigroups, or a heterogeneous list of semigroups
402
+
403
+ InstallMethod(DirectProductOp, "for a list and a semigroup",
404
+ [IsList, IsSemigroup],
405
+ function(list, S)
406
+ local iso, prod, info;
407
+
408
+ if IsEmpty(list) then
409
+ ErrorNoReturn("the 1st argument (a list) is not non-empty");
410
+ elif not ForAny(list, T -> IsIdenticalObj(S, T)) then
411
+ ErrorNoReturn("the 2nd argument is not one of the semigroups ",
412
+ "contained in the 1st argument (a list)");
413
+ elif not ForAll(list, IsSemigroup and IsFinite) then
414
+ TryNextMethod();
415
+ fi;
416
+
417
+ iso := List(list, IsomorphismTransformationSemigroup);
418
+ prod := DirectProduct(List(iso, Range));
419
+ info := SemigroupDirectProductInfo(prod);
420
+ info.factors := list;
421
+ info.iso := iso;
422
+ return prod;
423
+ end);
424
+
425
+ InstallMethod(Embedding,
426
+ "for a semigroup with semigroup direct product info and a pos int",
427
+ [IsSemigroup and HasSemigroupDirectProductInfo, IsPosInt],
428
+ function(D, i)
429
+ local info, map;
430
+ info := SemigroupDirectProductInfo(D);
431
+
432
+ if IsBound(info.embeddings) and IsBound(info.embeddings[i]) then
433
+ return info.embeddings[i];
434
+ elif IsBound(info.nrfactors) and i > info.nrfactors then
435
+ ErrorNoReturn("the 2nd argument (a pos. int.) is not in ",
436
+ "the range [1 .. ", info.nrfactors, "]");
437
+ elif not IsBound(info.nrfactors) or not IsBound(info.embedding) then
438
+ ErrorNoReturn("the direct product information for the 1st ",
439
+ "argument (a semigroup) is corrupted, please ",
440
+ "re-create the object");
441
+ elif not IsBound(info.embeddings) then
442
+ info.embeddings := [];
443
+ fi;
444
+
445
+ if IsBound(info.iso) then
446
+ map := x -> info.embedding(x ^ info.iso[i], i);
447
+ map := SemigroupHomomorphismByFunctionNC(info.factors[i], D, map);
448
+ else
449
+ map := SemigroupHomomorphismByFunctionNC(info.factors[i],
450
+ D,
451
+ x -> info.embedding(x, i));
452
+ fi;
453
+ info.embeddings[i] := map;
454
+ return map;
455
+ end);
456
+
457
+ InstallMethod(Projection,
458
+ "for a semigroup with semigroup direct product info and a pos int",
459
+ [IsSemigroup and HasSemigroupDirectProductInfo, IsPosInt],
460
+ function(D, i)
461
+ local info, map;
462
+ info := SemigroupDirectProductInfo(D);
463
+
464
+ if IsBound(info.projections) and IsBound(info.projections[i]) then
465
+ return info.projections[i];
466
+ elif IsBound(info.nrfactors) and i > info.nrfactors then
467
+ ErrorNoReturn("the 2nd argument (a pos. int.) is not in ",
468
+ "the range [1 .. ", info.nrfactors, "]");
469
+ elif not IsBound(info.nrfactors) or not IsBound(info.projection) then
470
+ ErrorNoReturn("the direct product information for the 1st ",
471
+ "argument (a semigroup) is corrupted, please ",
472
+ "re-create the object");
473
+ elif not IsBound(info.projections) then
474
+ info.projections := [];
475
+ fi;
476
+
477
+ if IsBound(info.iso) then
478
+ map := x -> info.projection(x, i) ^ InverseGeneralMapping(info.iso[i]);
479
+ map := SemigroupHomomorphismByFunctionNC(D, info.factors[i], map);
480
+ else
481
+ map := SemigroupHomomorphismByFunctionNC(D,
482
+ info.factors[i],
483
+ x -> info.projection(x, i));
484
+ fi;
485
+ info.projections[i] := map;
486
+ return map;
487
+ end);
488
+
489
+ InstallMethod(Size,
490
+ "for a semigroup with semigroup direct product info",
491
+ [IsSemigroup and HasSemigroupDirectProductInfo],
492
+ SUM_FLAGS,
493
+ function(D)
494
+ if SemigroupDirectProductInfo(D).nrfactors = 1 then
495
+ TryNextMethod();
496
+ fi;
497
+ return Product(List(SemigroupDirectProductInfo(D).factors, Size));
498
+ end);
499
+
500
+ InstallMethod(IsCommutativeSemigroup,
501
+ "for a semigroup with semigroup direct product info",
502
+ [IsSemigroup and HasSemigroupDirectProductInfo],
503
+ SUM_FLAGS,
504
+ function(D)
505
+ if SemigroupDirectProductInfo(D).nrfactors = 1 then
506
+ TryNextMethod();
507
+ fi;
508
+ return ForAll(SemigroupDirectProductInfo(D).factors, IsCommutativeSemigroup);
509
+ end);
@@ -0,0 +1,126 @@
1
+ #############################################################################
2
+ ##
3
+ ## semigroups/semieunit.gd
4
+ ## Copyright (C) 2016-2022 Christopher Russell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ DeclareCategory("IsMcAlisterTripleSemigroupElement",
12
+ IsAssociativeElement and IsMultiplicativeElementWithInverse);
13
+
14
+ # This is a representation for McAlister triple semigroup elements, which are
15
+ # created via the function McAlisterTripleSemigroupElement.
16
+ #
17
+ # If x belongs to the representation IsMcAlisterTripleElementRep, then the
18
+ # components are:
19
+ #
20
+ # x![1]: The McAlister triple semigroup which this element belongs to
21
+ #
22
+ # x![2]: A vertex of the McAlisterTripleSemigroupSemilattice of x![1]
23
+ #
24
+ # x![3]: An element of the McAlisterTripleSemigroupGroup of x![1]
25
+
26
+ DeclareRepresentation("IsMcAlisterTripleSemigroupElementRep",
27
+ IsMcAlisterTripleSemigroupElement
28
+ and IsPositionalObjectRep, 3);
29
+
30
+ DeclareCategoryCollections("IsMcAlisterTripleSemigroupElement");
31
+ DeclareSynonymAttr("IsMTSE", IsMcAlisterTripleSemigroupElement);
32
+ DeclareSynonymAttr("IsMcAlisterTripleSemigroup",
33
+ IsInverseSemigroup and IsGeneratorsOfInverseSemigroup
34
+ and IsMcAlisterTripleSemigroupElementCollection
35
+ and IsWholeFamily and IsActingSemigroup);
36
+ DeclareSynonymAttr("IsMTS", IsMcAlisterTripleSemigroup);
37
+ DeclareSynonym("IsMcAlisterTripleSubsemigroup",
38
+ IsMcAlisterTripleSemigroupElementCollection and IsSemigroup);
39
+
40
+ InstallTrueMethod(IsFinite, IsMcAlisterTripleSubsemigroup);
41
+
42
+ # This is a representation for McAlister triple semigroup, which are
43
+ # created via the function McAlisterTripleSemigroup.
44
+ #
45
+ # The attributes stored upon creation are:
46
+ #
47
+ # McAlisterTripleSemigroupGroup
48
+ # McAlisterTripleSemigroupPartialOrder
49
+ # McAlisterTripleSemigroupSemilattice
50
+ # McAlisterTripleSemigroupAction
51
+ # McAlisterTripleSemigroupUnderlyingAction
52
+ # McAlisterTripleSemigroupActionHomomorphism
53
+ # GeneratorsOfSemigroup
54
+ #
55
+ # their purpose is described in the section of the user manual on McAlister
56
+ # triple semigroups.
57
+
58
+ DeclareRepresentation("IsMcAlisterTripleSemigroupDefaultRep",
59
+ IsMcAlisterTripleSemigroup and IsAttributeStoringRep,
60
+ []);
61
+
62
+ InstallTrueMethod(IsGeneratorsOfInverseSemigroup,
63
+ IsMcAlisterTripleSemigroupElementCollection);
64
+
65
+ # Operations for creating McAlister triple semigroups
66
+ DeclareOperation("McAlisterTripleSemigroup",
67
+ [IsGroup, IsDigraph, IsDigraph, IsFunction]);
68
+ DeclareOperation("McAlisterTripleSemigroup",
69
+ [IsGroup, IsDigraph, IsHomogeneousList, IsFunction]);
70
+ DeclareOperation("McAlisterTripleSemigroup",
71
+ [IsPermGroup, IsDigraph, IsDigraph]);
72
+ DeclareOperation("McAlisterTripleSemigroup",
73
+ [IsPermGroup, IsDigraph, IsHomogeneousList]);
74
+
75
+ # Attributes for McAlister triple subsemigroups
76
+ DeclareAttribute("McAlisterTripleSemigroupGroup",
77
+ IsMcAlisterTripleSubsemigroup);
78
+ DeclareSynonymAttr("MTSGroup", McAlisterTripleSemigroupGroup);
79
+ DeclareAttribute("McAlisterTripleSemigroupAction",
80
+ IsMcAlisterTripleSubsemigroup);
81
+ DeclareSynonymAttr("MTSAction", McAlisterTripleSemigroupAction);
82
+ DeclareAttribute("McAlisterTripleSemigroupPartialOrder",
83
+ IsMcAlisterTripleSubsemigroup);
84
+ DeclareSynonymAttr("MTSPartialOrder", McAlisterTripleSemigroupPartialOrder);
85
+ DeclareAttribute("McAlisterTripleSemigroupSemilattice",
86
+ IsMcAlisterTripleSubsemigroup);
87
+ DeclareSynonymAttr("MTSSemilattice", McAlisterTripleSemigroupSemilattice);
88
+ DeclareAttribute("McAlisterTripleSemigroupActionHomomorphism",
89
+ IsMcAlisterTripleSubsemigroup);
90
+ DeclareSynonymAttr("MTSActionHomomorphism",
91
+ McAlisterTripleSemigroupActionHomomorphism);
92
+ DeclareAttribute("McAlisterTripleSemigroupUnderlyingAction",
93
+ IsMcAlisterTripleSubsemigroup);
94
+ DeclareSynonymAttr("MTSUnderlyingAction",
95
+ McAlisterTripleSemigroupUnderlyingAction);
96
+ DeclareAttribute("McAlisterTripleSemigroupSemilatticeVertexLabelInverseMap",
97
+ IsMcAlisterTripleSubsemigroup);
98
+ DeclareSynonymAttr("MTSSemilatticeVertexLabelInverseMap",
99
+ McAlisterTripleSemigroupSemilatticeVertexLabelInverseMap);
100
+ DeclareAttribute("OneImmutable",
101
+ IsMcAlisterTripleSemigroupElementCollection);
102
+ DeclareAttribute("McAlisterTripleSemigroupComponents",
103
+ IsMcAlisterTripleSubsemigroup);
104
+ DeclareSynonymAttr("MTSComponents",
105
+ McAlisterTripleSemigroupComponents);
106
+ DeclareAttribute("McAlisterTripleSemigroupQuotientDigraph",
107
+ IsMcAlisterTripleSubsemigroup);
108
+ DeclareSynonymAttr("MTSQuotientDigraph",
109
+ McAlisterTripleSemigroupQuotientDigraph);
110
+
111
+ # Operations for creating McAlister triple semigroup elements
112
+ DeclareOperation("McAlisterTripleSemigroupElement",
113
+ [IsMcAlisterTripleSemigroup,
114
+ IsPosInt, IsMultiplicativeElementWithInverse]);
115
+ DeclareSynonym("MTSE", McAlisterTripleSemigroupElement);
116
+
117
+ # Operations for McAlister triple semigroup elements
118
+ DeclareAttribute("McAlisterTripleSemigroupElementParent",
119
+ IsMcAlisterTripleSemigroupElementRep);
120
+ DeclareSynonymAttr("MTSEParent", McAlisterTripleSemigroupElementParent);
121
+ DeclareOperation("ELM_LIST", [IsMcAlisterTripleSemigroupElementRep, IsPosInt]);
122
+
123
+ # Inverse semigroup methods
124
+ DeclareAttribute("EUnitaryInverseCover", IsSemigroup);
125
+ DeclareProperty("IsFInverseSemigroup", IsSemigroup);
126
+ DeclareProperty("IsFInverseMonoid", IsSemigroup);