passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-macosx_14_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 +1157 -0
  17. gap/pkg/semigroups/config.status +1132 -0
  18. gap/pkg/semigroups/config.sub +1960 -0
  19. gap/pkg/semigroups/configure +9742 -0
  20. gap/pkg/semigroups/configure.ac +71 -0
  21. gap/pkg/semigroups/data/doc/greens.pickle +1 -0
  22. gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
  23. gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
  24. gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
  25. gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
  26. gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
  27. gap/pkg/semigroups/data/tst/bipart4 +10 -0
  28. gap/pkg/semigroups/data/tst/pperm10 +1 -0
  29. gap/pkg/semigroups/data/tst/tables.gz +0 -0
  30. gap/pkg/semigroups/data/tst/testdata +1 -0
  31. gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
  32. gap/pkg/semigroups/data/tst/trans3 +7 -0
  33. gap/pkg/semigroups/data/tst/trans3-old +7 -0
  34. gap/pkg/semigroups/environment.yml +7 -0
  35. gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
  36. gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
  37. gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
  38. gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
  39. gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
  40. gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
  41. gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
  42. gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
  43. gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
  44. gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
  45. gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
  46. gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
  47. gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
  48. gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
  49. gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
  50. gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
  51. gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
  52. gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
  53. gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
  54. gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
  55. gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
  56. gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
  57. gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
  58. gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
  59. gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
  60. gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
  61. gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
  62. gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
  63. gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
  64. gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
  65. gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
  66. gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
  67. gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
  68. gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
  69. gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
  70. gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
  71. gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
  72. gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
  73. gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
  74. gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
  75. gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
  76. gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
  77. gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
  78. gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
  79. gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
  80. gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
  81. gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
  82. gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
  83. gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
  84. gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
  85. gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
  86. gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
  87. gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
  88. gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
  89. gap/pkg/semigroups/gap/elements/elements.gd +11 -0
  90. gap/pkg/semigroups/gap/elements/elements.gi +121 -0
  91. gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
  92. gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
  93. gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
  94. gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
  95. gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
  96. gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
  97. gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
  98. gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
  99. gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
  100. gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
  101. gap/pkg/semigroups/gap/elements/star.gd +21 -0
  102. gap/pkg/semigroups/gap/elements/star.gi +21 -0
  103. gap/pkg/semigroups/gap/elements/trans.gd +13 -0
  104. gap/pkg/semigroups/gap/elements/trans.gi +50 -0
  105. gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
  106. gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
  107. gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
  108. gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
  109. gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
  110. gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
  111. gap/pkg/semigroups/gap/fp/word.gd +15 -0
  112. gap/pkg/semigroups/gap/fp/word.gi +67 -0
  113. gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
  114. gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
  115. gap/pkg/semigroups/gap/greens/acting.gd +81 -0
  116. gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
  117. gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
  118. gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
  119. gap/pkg/semigroups/gap/greens/generic.gd +117 -0
  120. gap/pkg/semigroups/gap/greens/generic.gi +630 -0
  121. gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
  122. gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
  123. gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
  124. gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
  125. gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
  126. gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
  127. gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
  128. gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
  129. gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
  130. gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
  131. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
  132. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
  133. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
  134. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
  135. gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
  136. gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
  137. gap/pkg/semigroups/gap/main/acting.gd +36 -0
  138. gap/pkg/semigroups/gap/main/acting.gi +779 -0
  139. gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
  140. gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
  141. gap/pkg/semigroups/gap/main/graded.gd +26 -0
  142. gap/pkg/semigroups/gap/main/graded.gi +355 -0
  143. gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
  144. gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
  145. gap/pkg/semigroups/gap/main/orbits.gd +24 -0
  146. gap/pkg/semigroups/gap/main/orbits.gi +512 -0
  147. gap/pkg/semigroups/gap/main/semiact.gd +20 -0
  148. gap/pkg/semigroups/gap/main/semiact.gi +821 -0
  149. gap/pkg/semigroups/gap/main/setup.gd +61 -0
  150. gap/pkg/semigroups/gap/main/setup.gi +1094 -0
  151. gap/pkg/semigroups/gap/obsolete.gd +9 -0
  152. gap/pkg/semigroups/gap/obsolete.gi +14 -0
  153. gap/pkg/semigroups/gap/options.g +55 -0
  154. gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
  155. gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
  156. gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
  157. gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
  158. gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
  159. gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
  160. gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
  161. gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
  162. gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
  163. gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
  164. gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
  165. gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
  166. gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
  167. gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
  168. gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
  169. gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
  170. gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
  171. gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
  172. gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
  173. gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
  174. gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
  175. gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
  176. gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
  177. gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
  178. gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
  179. gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
  180. gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
  181. gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
  182. gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
  183. gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
  184. gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
  185. gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
  186. gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
  187. gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
  188. gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
  189. gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
  190. gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
  191. gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
  192. gap/pkg/semigroups/gap/tools/display.gd +24 -0
  193. gap/pkg/semigroups/gap/tools/display.gi +749 -0
  194. gap/pkg/semigroups/gap/tools/io.gd +17 -0
  195. gap/pkg/semigroups/gap/tools/io.gi +543 -0
  196. gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
  197. gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
  198. gap/pkg/semigroups/gap/tools/utils.gd +19 -0
  199. gap/pkg/semigroups/gap/tools/utils.gi +756 -0
  200. gap/pkg/semigroups/gapbind14/.ccls +18 -0
  201. gap/pkg/semigroups/gapbind14/.clang-format +104 -0
  202. gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
  203. gap/pkg/semigroups/gapbind14/LICENSE +674 -0
  204. gap/pkg/semigroups/gapbind14/README.md +76 -0
  205. gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
  206. gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
  207. gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
  208. gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
  209. gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
  210. gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
  211. gap/pkg/semigroups/gapbind14/demo/configure +34 -0
  212. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
  213. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
  214. gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
  215. gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
  216. gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
  217. gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
  218. gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
  219. gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
  220. gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
  221. gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
  222. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
  223. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
  224. gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
  225. gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
  226. gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
  227. gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
  228. gap/pkg/semigroups/init.g +150 -0
  229. gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
  230. gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
  231. gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
  232. gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
  233. gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
  234. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
  235. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
  236. gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
  237. gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
  238. gap/pkg/semigroups/m4/find_gap.m4 +94 -0
  239. gap/pkg/semigroups/makedoc.g +153 -0
  240. gap/pkg/semigroups/prerequisites.sh +62 -0
  241. gap/pkg/semigroups/read.g +105 -0
  242. gap/pkg/semigroups/release.toml +6 -0
  243. gap/pkg/semigroups/tst/extreme/README +2 -0
  244. gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
  245. gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
  246. gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
  247. gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
  248. gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
  249. gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
  250. gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
  251. gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
  252. gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
  253. gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
  254. gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
  255. gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
  256. gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
  257. gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
  258. gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
  259. gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
  260. gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
  261. gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
  262. gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
  263. gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
  264. gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
  265. gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
  266. gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
  267. gap/pkg/semigroups/tst/standard/README +2 -0
  268. gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
  269. gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
  270. gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
  271. gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
  272. gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
  273. gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
  274. gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
  275. gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
  276. gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
  277. gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
  278. gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
  279. gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
  280. gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
  281. gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
  282. gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
  283. gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
  284. gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
  285. gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
  286. gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
  287. gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
  288. gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
  289. gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
  290. gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
  291. gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
  292. gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
  293. gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
  294. gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
  295. gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
  296. gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
  297. gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
  298. gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
  299. gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
  300. gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
  301. gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
  302. gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
  303. gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
  304. gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
  305. gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
  306. gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
  307. gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
  308. gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
  309. gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
  310. gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
  311. gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
  312. gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
  313. gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
  314. gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
  315. gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
  316. gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
  317. gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
  318. gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
  319. gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
  320. gap/pkg/semigroups/tst/standard/options.tst +54 -0
  321. gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
  322. gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
  323. gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
  324. gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
  325. gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
  326. gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
  327. gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
  328. gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
  329. gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
  330. gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
  331. gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
  332. gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
  333. gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
  334. gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
  335. gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
  336. gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
  337. gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
  338. gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
  339. gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
  340. gap/pkg/semigroups/tst/testinstall.tst +1815 -0
  341. gap/pkg/semigroups/tst/teststandard.g +22 -0
  342. gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
  343. gap/pkg/semigroups/tst/workspaces/load.g +11 -0
  344. gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
  345. gap/pkg/semigroups/tst/workspaces/save.g +14 -0
  346. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA +93 -0
  347. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
  348. passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +354 -0
  349. passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +6 -0
  350. passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.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,431 @@
1
+ ###########################################################################
2
+ ##
3
+ ## libsemigroups/cong.gi
4
+ ## Copyright (C) 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 the interface to libsemigroups Congruence objects.
12
+
13
+ ###########################################################################
14
+ # Categories + properties + true methods
15
+ ###########################################################################
16
+
17
+ # Unless explicitly excluded below, any left, right, or 2-sided congruence
18
+ # satisfies CanUseLibsemigroupsCongruence if its range has generators and
19
+ # CanUseFroidurePin, and the congruence has GeneratingPairs. The main reason to
20
+ # exclude some types of congruences from having CanUseLibsemigroupsCongruence
21
+ # is because there are better methods specifically for that type of congruence,
22
+ # and to avoid inadvertently computing a libsemigroups Congruence object.
23
+ # Note that any congruence with generating pairs whose range/source has
24
+ # CanUseFroidurePin, can use libsemigroups Congruence objects in theory (and
25
+ # they could also in practice), but we exclude this, for the reasons above.
26
+ #
27
+ # The fundamental operation for Congruences that satisfy
28
+ # CanUseLibsemigroupsCongruence is EquivalenceRelationPartition, and any type
29
+ # of congruence not satisfying CanUseLibsemigroupsCongruence should implement
30
+ # EquivalenceRelationPartition, and then the other methods will be available.
31
+
32
+ InstallImmediateMethod(CanUseLibsemigroupsCongruence,
33
+ IsLeftRightOrTwoSidedCongruence
34
+ and HasRange,
35
+ 0,
36
+ C -> CanUseFroidurePin(Range(C))
37
+ and HasGeneratorsOfSemigroup(Range(C))
38
+ or (HasIsFreeSemigroup(Range(C))
39
+ and IsFreeSemigroup(Range(C)))
40
+ or (HasIsFreeMonoid(Range(C))
41
+ and IsFreeMonoid(Range(C))));
42
+
43
+ InstallMethod(CanUseLibsemigroupsCongruence,
44
+ "for a left, right, or 2-sided congruence that can compute partition",
45
+ [CanComputeEquivalenceRelationPartition],
46
+ ReturnFalse);
47
+
48
+ # TODO(later) remove CanUseLibsemigroupsCongruences?
49
+
50
+ # A semigroup satisfies this property if its congruences should belong to
51
+ # CanUseLibsemigroupsCongruence.
52
+ DeclareProperty("CanUseLibsemigroupsCongruences", IsSemigroup);
53
+
54
+ InstallTrueMethod(CanUseLibsemigroupsCongruences,
55
+ IsSemigroup and CanUseFroidurePin);
56
+ InstallTrueMethod(CanUseLibsemigroupsCongruences,
57
+ IsFpSemigroup);
58
+ InstallTrueMethod(CanUseLibsemigroupsCongruences,
59
+ IsFpMonoid);
60
+ InstallTrueMethod(CanUseLibsemigroupsCongruences,
61
+ HasIsFreeSemigroup and IsFreeSemigroup);
62
+ InstallTrueMethod(CanUseLibsemigroupsCongruences,
63
+ HasIsFreeMonoid and IsFreeMonoid);
64
+ InstallTrueMethod(CanUseLibsemigroupsCongruence,
65
+ IsInverseSemigroupCongruenceByKernelTrace);
66
+
67
+ ###########################################################################
68
+ # Functions/methods that are declared in this file and that use the
69
+ # libsemigroups object directly
70
+ ###########################################################################
71
+
72
+ DeclareAttribute("LibsemigroupsCongruenceConstructor",
73
+ IsSemigroup and CanUseLibsemigroupsCongruences);
74
+
75
+ # Construct a libsemigroups::Congruence from some GAP object
76
+
77
+ InstallMethod(LibsemigroupsCongruenceConstructor,
78
+ "for a transformation semigroup with CanUseLibsemigroupsCongruences",
79
+ [IsTransformationSemigroup and CanUseLibsemigroupsCongruences],
80
+ function(S)
81
+ local N;
82
+ N := DegreeOfTransformationSemigroup(S);
83
+ if N <= 16 and IsBound(LIBSEMIGROUPS_HPCOMBI_ENABLED) then
84
+ return libsemigroups.Congruence.make_from_froidurepin_leasttransf;
85
+ elif N <= 2 ^ 16 then
86
+ return libsemigroups.Congruence.make_from_froidurepin_transfUInt2;
87
+ elif N <= 2 ^ 32 then
88
+ return libsemigroups.Congruence.make_from_froidurepin_transfUInt4;
89
+ else
90
+ # Cannot currently test the next line
91
+ Error("transformation degree is too high!");
92
+ fi;
93
+ end);
94
+
95
+ InstallMethod(LibsemigroupsCongruenceConstructor,
96
+ "for a partial perm semigroup with CanUseLibsemigroupsCongruences",
97
+ [IsPartialPermSemigroup and CanUseLibsemigroupsCongruences],
98
+ function(S)
99
+ local N;
100
+ N := Maximum(DegreeOfPartialPermSemigroup(S),
101
+ CodegreeOfPartialPermSemigroup(S));
102
+ if N <= 16 and IsBound(LIBSEMIGROUPS_HPCOMBI_ENABLED) then
103
+ return libsemigroups.Congruence.make_from_froidurepin_leastpperm;
104
+ elif N <= 2 ^ 16 then
105
+ return libsemigroups.Congruence.make_from_froidurepin_ppermUInt2;
106
+ elif N <= 2 ^ 32 then
107
+ return libsemigroups.Congruence.make_from_froidurepin_ppermUInt4;
108
+ else
109
+ # Cannot currently test the next line
110
+ Error("partial perm degree is too high!");
111
+ fi;
112
+ end);
113
+
114
+ InstallMethod(LibsemigroupsCongruenceConstructor,
115
+ "for a boolean matrix semigroup with CanUseLibsemigroupsCongruences",
116
+ [IsBooleanMatSemigroup and CanUseLibsemigroupsCongruences],
117
+ function(S)
118
+ if DimensionOfMatrixOverSemiring(Representative(S)) <= 8 then
119
+ return libsemigroups.Congruence.make_from_froidurepin_bmat8;
120
+ fi;
121
+ return libsemigroups.Congruence.make_from_froidurepin_bmat;
122
+ end);
123
+
124
+ # Why does this work for types other than boolean matrices?
125
+ InstallMethod(LibsemigroupsCongruenceConstructor,
126
+ "for a matrix semigroup with CanUseLibsemigroupsCongruences",
127
+ [IsMatrixOverSemiringSemigroup and CanUseLibsemigroupsCongruences],
128
+ _ -> libsemigroups.Congruence.make_from_froidurepin_bmat);
129
+
130
+ InstallMethod(LibsemigroupsCongruenceConstructor,
131
+ "for a bipartition semigroup with CanUseLibsemigroupsCongruences",
132
+ [IsBipartitionSemigroup and CanUseLibsemigroupsCongruences],
133
+ _ -> libsemigroups.Congruence.make_from_froidurepin_bipartition);
134
+
135
+ InstallMethod(LibsemigroupsCongruenceConstructor,
136
+ "for a PBR semigroup and CanUseLibsemigroupsCongruences",
137
+ [IsPBRSemigroup and CanUseLibsemigroupsCongruences],
138
+ _ -> libsemigroups.Congruence.make_from_froidurepin_pbr);
139
+
140
+ InstallMethod(LibsemigroupsCongruenceConstructor,
141
+ "for a quotient semigroup and CanUseLibsemigroupsCongruences",
142
+ [IsQuotientSemigroup and CanUseLibsemigroupsCongruences],
143
+ _ -> libsemigroups.Congruence.make_from_froidurepinbase);
144
+
145
+ # Get the libsemigroups::Congruence object associated to a GAP object
146
+
147
+ BindGlobal("LibsemigroupsCongruence",
148
+ function(C)
149
+ local S, make, CC, factor, N, tc, table, add_pair, pair;
150
+
151
+ Assert(1, CanUseLibsemigroupsCongruence(C));
152
+
153
+ if IsBound(C!.LibsemigroupsCongruence)
154
+ and IsValidGapbind14Object(C!.LibsemigroupsCongruence) then
155
+ # Tested in workspace tests
156
+ return C!.LibsemigroupsCongruence;
157
+ fi;
158
+ Unbind(C!.LibsemigroupsCongruence);
159
+
160
+ S := Range(C);
161
+ if IsFpSemigroup(S) or (HasIsFreeSemigroup(S) and IsFreeSemigroup(S))
162
+ or IsFpMonoid(S) or (HasIsFreeMonoid(S) and IsFreeMonoid(S)) then
163
+ make := libsemigroups.Congruence.make_from_fpsemigroup;
164
+ CC := make(CongruenceHandednessString(C), LibsemigroupsFpSemigroup(S));
165
+ factor := Factorization;
166
+ elif CanUseLibsemigroupsFroidurePin(S) then
167
+ CC := LibsemigroupsCongruenceConstructor(S)(CongruenceHandednessString(C),
168
+ LibsemigroupsFroidurePin(S));
169
+ factor := MinimalFactorization;
170
+ elif CanUseGapFroidurePin(S) then
171
+ N := Length(GeneratorsOfSemigroup(Range(C)));
172
+ tc := libsemigroups.ToddCoxeter.make(CongruenceHandednessString(C));
173
+ libsemigroups.ToddCoxeter.set_number_of_generators(tc, N);
174
+ if IsRightMagmaCongruence(C) then
175
+ table := RightCayleyGraphSemigroup(Range(C)) - 1;
176
+ else
177
+ table := LeftCayleyGraphSemigroup(Range(C)) - 1;
178
+ fi;
179
+ libsemigroups.ToddCoxeter.prefill(tc, table);
180
+ CC := libsemigroups.Congruence.make_from_table(
181
+ CongruenceHandednessString(C), "none");
182
+ libsemigroups.Congruence.set_number_of_generators(CC, N);
183
+ libsemigroups.Congruence.add_runner(CC, tc);
184
+ factor := MinimalFactorization;
185
+ else
186
+ TryNextMethod();
187
+ fi;
188
+ add_pair := libsemigroups.Congruence.add_pair;
189
+ for pair in GeneratingPairsOfLeftRightOrTwoSidedCongruence(C) do
190
+ add_pair(CC, factor(S, pair[1]) - 1, factor(S, pair[2]) - 1);
191
+ od;
192
+ C!.LibsemigroupsCongruence := CC;
193
+ return CC;
194
+ end);
195
+
196
+ ########################################################################
197
+
198
+ DeclareOperation("CongruenceWordToClassIndex",
199
+ [CanUseLibsemigroupsCongruence, IsHomogeneousList]);
200
+ DeclareOperation("CongruenceWordToClassIndex",
201
+ [CanUseLibsemigroupsCongruence, IsMultiplicativeElement]);
202
+
203
+ InstallMethod(CongruenceWordToClassIndex,
204
+ "for CanUseLibsemigroupsCongruence and hom. list",
205
+ [CanUseLibsemigroupsCongruence, IsHomogeneousList],
206
+ function(C, word)
207
+ local CC;
208
+ CC := LibsemigroupsCongruence(C);
209
+ return libsemigroups.Congruence.word_to_class_index(CC, word - 1) + 1;
210
+ end);
211
+
212
+ InstallMethod(CongruenceWordToClassIndex,
213
+ "for CanUseLibsemigroupsCongruence and hom. list",
214
+ [CanUseLibsemigroupsCongruence, IsMultiplicativeElement],
215
+ {C, x} -> CongruenceWordToClassIndex(C, MinimalFactorization(Range(C), x)));
216
+
217
+ ########################################################################
218
+
219
+ InstallMethod(CongruenceLessNC,
220
+ "for CanUseLibsemigroupsCongruence and two mult. elements",
221
+ [CanUseLibsemigroupsCongruence,
222
+ IsMultiplicativeElement,
223
+ IsMultiplicativeElement],
224
+ function(C, elm1, elm2)
225
+ local S, pos1, pos2, lookup, word1, word2, CC;
226
+
227
+ S := Range(C);
228
+ if CanUseFroidurePin(S) then
229
+ pos1 := PositionCanonical(S, elm1);
230
+ pos2 := PositionCanonical(S, elm2);
231
+ if HasEquivalenceRelationCanonicalLookup(C) then
232
+ lookup := EquivalenceRelationCanonicalLookup(C);
233
+ return lookup[pos1] < lookup[pos2];
234
+ else
235
+ word1 := MinimalFactorization(S, pos1);
236
+ word2 := MinimalFactorization(S, pos2);
237
+ fi;
238
+ elif IsFpSemigroup(S) or (HasIsFreeSemigroup(S) and IsFreeSemigroup(S))
239
+ or IsFpMonoid(S) or (HasIsFreeMonoid(S) and IsFreeMonoid(S))
240
+ or IsQuotientSemigroup(S) then
241
+ word1 := Factorization(S, elm1);
242
+ word2 := Factorization(S, elm2);
243
+ else
244
+ # Cannot currently test the next line
245
+ Assert(0, false);
246
+ fi;
247
+ CC := LibsemigroupsCongruence(C);
248
+ return libsemigroups.Congruence.less(CC, word1 - 1, word2 - 1);
249
+ end);
250
+
251
+ ###########################################################################
252
+ # Functions/methods that are declared elsewhere and that use the
253
+ # libsemigroups object directly
254
+ ###########################################################################
255
+
256
+ InstallMethod(NrEquivalenceClasses,
257
+ "for CanUseLibsemigroupsCongruence with known generating pairs",
258
+ [CanUseLibsemigroupsCongruence and
259
+ HasGeneratingPairsOfLeftRightOrTwoSidedCongruence],
260
+ function(C)
261
+ local number_of_classes, result;
262
+ number_of_classes := libsemigroups.Congruence.number_of_classes;
263
+ result := number_of_classes(LibsemigroupsCongruence(C));
264
+ if result = -2 then
265
+ return infinity;
266
+ fi;
267
+ return result;
268
+ end);
269
+
270
+ InstallMethod(CongruenceTestMembershipNC,
271
+ "for CanUseLibsemigroupsCongruence with known gen. pairs and 2 mult. elts",
272
+ [CanUseLibsemigroupsCongruence and
273
+ HasGeneratingPairsOfLeftRightOrTwoSidedCongruence,
274
+ IsMultiplicativeElement,
275
+ IsMultiplicativeElement],
276
+ 100,
277
+ function(C, elm1, elm2)
278
+ local S, pos1, pos2, lookup, word1, word2, CC;
279
+
280
+ S := Range(C);
281
+ if IsFpSemigroup(S) or (HasIsFreeSemigroup(S) and IsFreeSemigroup(S))
282
+ or IsFpMonoid(S) or (HasIsFreeMonoid(S) and IsFreeMonoid(S)) then
283
+ word1 := Factorization(S, elm1);
284
+ word2 := Factorization(S, elm2);
285
+ elif CanUseFroidurePin(S) then
286
+ pos1 := PositionCanonical(S, elm1);
287
+ pos2 := PositionCanonical(S, elm2);
288
+ if HasEquivalenceRelationLookup(C) then
289
+ lookup := EquivalenceRelationLookup(C);
290
+ return lookup[pos1] = lookup[pos2];
291
+ else
292
+ word1 := MinimalFactorization(S, pos1);
293
+ word2 := MinimalFactorization(S, pos2);
294
+ fi;
295
+ else
296
+ # Cannot currently test the next line
297
+ Assert(0, false);
298
+ fi;
299
+ CC := LibsemigroupsCongruence(C);
300
+ return libsemigroups.Congruence.contains(CC, word1 - 1, word2 - 1);
301
+ end);
302
+
303
+ InstallMethod(EquivalenceRelationPartition,
304
+ "for CanUseLibsemigroupsCongruence with known generating pairs",
305
+ [CanUseLibsemigroupsCongruence and
306
+ HasGeneratingPairsOfLeftRightOrTwoSidedCongruence],
307
+ function(C)
308
+ local S, CC, ntc, gens, class, i, j;
309
+ S := Range(C);
310
+ if not IsFinite(S) or CanUseLibsemigroupsFroidurePin(S) then
311
+ CC := LibsemigroupsCongruence(C);
312
+ ntc := libsemigroups.Congruence.ntc(CC) + 1;
313
+ gens := GeneratorsOfSemigroup(S);
314
+ for i in [1 .. Length(ntc)] do
315
+ class := ntc[i];
316
+ for j in [1 .. Length(class)] do
317
+ class[j] := EvaluateWord(gens, class[j]);
318
+ od;
319
+ od;
320
+ return ntc;
321
+ elif CanUseGapFroidurePin(S) then
322
+ # in this case libsemigroups.Congruence.ntc doesn't work, because S is not
323
+ # represented in the libsemigroups object
324
+ return Filtered(EquivalenceRelationPartitionWithSingletons(C),
325
+ x -> Size(x) > 1);
326
+ fi;
327
+ TryNextMethod();
328
+ end);
329
+
330
+ # Methods for congruence classes
331
+
332
+ InstallMethod(\<,
333
+ "for congruence classes of CanUseLibsemigroupsCongruence", IsIdenticalObj,
334
+ [IsLeftRightOrTwoSidedCongruenceClass, IsLeftRightOrTwoSidedCongruenceClass],
335
+ 1, # to beat the method in congruences/cong.gi for
336
+ # IsLeftRightOrTwoSidedCongruenceClass
337
+ function(class1, class2)
338
+ local C, word1, word2, CC;
339
+
340
+ C := EquivalenceClassRelation(class1);
341
+ if not CanUseLibsemigroupsCongruence(C)
342
+ or not HasGeneratingPairsOfLeftRightOrTwoSidedCongruence(C) then
343
+ TryNextMethod();
344
+ elif C <> EquivalenceClassRelation(class2) then
345
+ return false;
346
+ fi;
347
+
348
+ word1 := Factorization(Range(C), Representative(class1));
349
+ word2 := Factorization(Range(C), Representative(class2));
350
+ CC := LibsemigroupsCongruence(C);
351
+ return libsemigroups.Congruence.less(CC, word1 - 1, word2 - 1);
352
+ end);
353
+
354
+ InstallMethod(EquivalenceClasses,
355
+ "for CanUseLibsemigroupsCongruence with known generating pairs",
356
+ [CanUseLibsemigroupsCongruence and
357
+ HasGeneratingPairsOfLeftRightOrTwoSidedCongruence],
358
+ function(C)
359
+ local result, CC, gens, class_index_to_word, rep, i;
360
+
361
+ if NrEquivalenceClasses(C) = infinity then
362
+ ErrorNoReturn("the argument (a congruence) must have a finite ",
363
+ "number of classes");
364
+ fi;
365
+
366
+ result := EmptyPlist(NrEquivalenceClasses(C));
367
+ CC := LibsemigroupsCongruence(C);
368
+ gens := GeneratorsOfSemigroup(Range(C));
369
+ class_index_to_word := libsemigroups.Congruence.class_index_to_word;
370
+ for i in [1 .. NrEquivalenceClasses(C)] do
371
+ rep := EvaluateWord(gens, class_index_to_word(CC, i - 1) + 1);
372
+ result[i] := EquivalenceClassOfElementNC(C, rep);
373
+ od;
374
+ return result;
375
+ end);
376
+
377
+ ###########################################################################
378
+ # Methods NOT using libsemigroups object directly but that use an
379
+ # operation or function that only applies to CanUseLibsemigroupsCongruence
380
+ ###########################################################################
381
+
382
+ InstallMethod(EquivalenceRelationPartitionWithSingletons,
383
+ "for CanUseLibsemigroupsCongruence with known generating pairs",
384
+ [CanUseLibsemigroupsCongruence and
385
+ HasGeneratingPairsOfLeftRightOrTwoSidedCongruence],
386
+ function(C)
387
+ local part, word, i, x;
388
+ if not IsFinite(Range(C)) then
389
+ ErrorNoReturn("the argument (a congruence) must have finite range");
390
+ fi;
391
+
392
+ part := [];
393
+ for x in Range(C) do
394
+ word := MinimalFactorization(Range(C), x);
395
+ i := CongruenceWordToClassIndex(C, word);
396
+ if not IsBound(part[i]) then
397
+ part[i] := [];
398
+ fi;
399
+ Add(part[i], x);
400
+ od;
401
+
402
+ return part;
403
+ end);
404
+
405
+ InstallMethod(ImagesElm,
406
+ "for CanUseLibsemigroupsCongruence with known gen. pairs and a mult. elt.",
407
+ [CanUseLibsemigroupsCongruence and
408
+ HasGeneratingPairsOfLeftRightOrTwoSidedCongruence, IsMultiplicativeElement],
409
+ function(cong, elm)
410
+ local lookup, id, part, pos;
411
+
412
+ if HasIsFinite(Range(cong)) and IsFinite(Range(cong))
413
+ and CanUseFroidurePin(Range(cong)) then
414
+ lookup := EquivalenceRelationCanonicalLookup(cong);
415
+ id := lookup[PositionCanonical(Range(cong), elm)];
416
+ return EnumeratorCanonical(Range(cong)){Positions(lookup, id)};
417
+ elif IsFpSemigroup(Range(cong))
418
+ or (HasIsFreeSemigroup(Range(cong)) and IsFreeSemigroup(Range(cong)))
419
+ or IsFpMonoid(Range(cong))
420
+ or (HasIsFreeMonoid(Range(cong)) and IsFreeMonoid(Range(cong)))
421
+ or IsQuotientSemigroup(Range(cong)) then
422
+ part := EquivalenceRelationPartition(cong);
423
+ pos := PositionProperty(part, l -> [elm, l[1]] in cong);
424
+ if pos = fail then
425
+ return [elm]; # singleton
426
+ fi;
427
+ return part[pos]; # non-singleton
428
+ fi;
429
+ # Shouldn't be able to reach here
430
+ Assert(0, false);
431
+ end);
@@ -0,0 +1,16 @@
1
+ #############################################################################
2
+ ##
3
+ ## libsemigroups/fpsemi.gd
4
+ ## Copyright (C) 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 exists to construct a libsemigroups FpSemigroup object for an fp
12
+ # semigroup or monoid. The resulting libsemigroups::FpSemigroup object is only
13
+ # used to initialize a libsemigroups::Congruence object where most questions
14
+ # asked about FpSemigroup/FpMonoids will be answered.
15
+
16
+ DeclareGlobalFunction("LibsemigroupsFpSemigroup");
@@ -0,0 +1,53 @@
1
+ #############################################################################
2
+ ##
3
+ ## libsemigroups/fpsemi.gi
4
+ ## Copyright (C) 2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ InstallGlobalFunction("LibsemigroupsFpSemigroup",
12
+ function(S)
13
+ local F, SS, R, add_rule, pair;
14
+
15
+ Assert(1, IsFpSemigroup(S) or (HasIsFreeSemigroup(S) and IsFreeSemigroup(S))
16
+ or IsFpMonoid(S) or (HasIsFreeMonoid(S) and IsFreeMonoid(S)));
17
+
18
+ if IsBound(S!.LibsemigroupsFpSemigroup)
19
+ and IsValidGapbind14Object(S!.LibsemigroupsFpSemigroup) then
20
+ return S!.LibsemigroupsFpSemigroup;
21
+ fi;
22
+ Unbind(S!.LibsemigroupsFpSemigroup);
23
+ if IsFpSemigroup(S) then
24
+ F := FreeSemigroupOfFpSemigroup(S);
25
+ elif IsFpMonoid(S) then
26
+ F := FreeMonoidOfFpMonoid(S);
27
+ else
28
+ # Free semigroup or monoid
29
+ F := S;
30
+ fi;
31
+
32
+ SS := libsemigroups.FpSemigroup.make();
33
+ libsemigroups.FpSemigroup.set_alphabet(SS, Size(GeneratorsOfSemigroup(S)));
34
+
35
+ if IsMonoid(S) then
36
+ # The identity must be 0 so that this corresponds to what happens in
37
+ # FroidurePin, where GeneratorsOfSemigroup(S) is used and the identity is
38
+ # the first entry.
39
+ libsemigroups.FpSemigroup.set_identity(SS, 0);
40
+ R := RelationsOfFpMonoid(S);
41
+ else
42
+ R := RelationsOfFpSemigroup(S);
43
+ fi;
44
+
45
+ add_rule := libsemigroups.FpSemigroup.add_rule;
46
+ for pair in R do
47
+ add_rule(SS,
48
+ Factorization(F, pair[1]) - 1,
49
+ Factorization(F, pair[2]) - 1);
50
+ od;
51
+ S!.LibsemigroupsFpSemigroup := SS;
52
+ return SS;
53
+ end);
@@ -0,0 +1,17 @@
1
+ ###########################################################################
2
+ ##
3
+ ## libsemigroups/froidure-pin.gd
4
+ ## Copyright (C) 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 declarations for the interface with
12
+ # libsemigroups::FroidurePin
13
+
14
+ DeclareGlobalFunction("LibsemigroupsFroidurePin");
15
+
16
+ DeclareProperty("CanUseLibsemigroupsFroidurePin", IsSemigroup);
17
+ DeclareOperation("HasLibsemigroupsFroidurePin", [IsSemigroup]);