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,21 @@
1
+ #############################################################################
2
+ ##
3
+ ## elements/star.gd
4
+ ## Copyright (C) 2015-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ DeclareCategory("IsAssociativeElementWithStar", IsAssociativeElement);
12
+ DeclareCategoryCollections("IsAssociativeElementWithStar");
13
+ DeclareOperation("StarOp", [IsAssociativeElementWithStar]);
14
+ DeclareAttribute("Star", IsAssociativeElementWithStar);
15
+
16
+ DeclareProperty("IsStarSemigroup",
17
+ IsSemigroup and IsAssociativeElementWithStarCollection);
18
+ DeclareSynonym("IsRegularStarSemigroup",
19
+ IsRegularSemigroup and IsStarSemigroup);
20
+
21
+ DeclareOperation("InverseOp", [IsAssociativeElementWithStar]);
@@ -0,0 +1,21 @@
1
+ #############################################################################
2
+ ##
3
+ ## elements/star.gi
4
+ ## Copyright (C) 2015-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ InstallMethod(Star, "for an associative element with star",
12
+ [IsAssociativeElementWithStar],
13
+ function(elm)
14
+ elm := StarOp(elm);
15
+ MakeImmutable(elm);
16
+ return elm;
17
+ end);
18
+
19
+ InstallMethod(IsStarSemigroup, "for a semigroup of elements with star",
20
+ [IsSemigroup and IsAssociativeElementWithStarCollection],
21
+ S -> ForAll(GeneratorsOfSemigroup(S), x -> Star(x) in S));
@@ -0,0 +1,13 @@
1
+ ############################################################################
2
+ ##
3
+ ## elements/trans.gd
4
+ ## Copyright (C) 2015-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+
10
+ DeclareAttribute("CanonicalTransformation", IsTransformation);
11
+ DeclareOperation("CanonicalTransformation", [IsTransformation, IsInt]);
12
+ DeclareOperation("TransformationByImageAndKernel",
13
+ [IsHomogeneousList, IsCyclotomicCollColl]);
@@ -0,0 +1,50 @@
1
+ ############################################################################
2
+ ##
3
+ ## elements/trans.gi
4
+ ## Copyright (C) 2015-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+
10
+ InstallMethod(CanonicalTransformation, "for a transformation",
11
+ [IsTransformation], f -> CanonicalTransformation(f, DegreeOfTransformation(f)));
12
+
13
+ InstallMethod(CanonicalTransformation, "for a transformation",
14
+ [IsTransformation, IsInt],
15
+ function(f, n)
16
+ local digraph;
17
+ if n < DegreeOfTransformation(f) then
18
+ ErrorNoReturn("the second argument (an integer) must be at least ",
19
+ "the degree of the first argument (a transformation)");
20
+ fi;
21
+
22
+ digraph := AsDigraph(f, n);
23
+ return AsTransformation(OnDigraphs(digraph,
24
+ BlissCanonicalLabelling(digraph)));
25
+ end);
26
+
27
+ InstallMethod(TransformationByImageAndKernel, "for an image and partition",
28
+ [IsHomogeneousList, IsCyclotomicCollColl],
29
+ function(im, ker)
30
+ local flat, i;
31
+
32
+ if not ForAll(ker, class -> ForAll(class, IsPosInt)) then
33
+ ErrorNoReturn("the argument must be a list of lists of pos ints");
34
+ fi;
35
+
36
+ flat := Union(ker);
37
+
38
+ if flat <> [1 .. Length(flat)] then
39
+ ErrorNoReturn("the union of the second argument (a partition) must ",
40
+ "be [1 .. ", Length(flat), "]");
41
+ fi;
42
+
43
+ for i in [1 .. Length(ker)] do
44
+ flat{ker[i]} := [1 .. Length(ker[i])] * 0 + i;
45
+ od;
46
+ return TransformationByImageAndKernel(im, flat);
47
+ end);
48
+
49
+ InstallMethod(IndexPeriodOfSemigroupElement, "for a transformation",
50
+ [IsTransformation], IndexPeriodOfTransformation);
@@ -0,0 +1,22 @@
1
+ ###############################################################################
2
+ ##
3
+ ## fp/freeband.gd
4
+ ## Copyright (C) 2013-2022 Julius Jonusas
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ ###############################################################################
9
+
10
+ DeclareCategory("IsFreeBandElement", IsAssociativeElement);
11
+ DeclareCategoryCollections("IsFreeBandElement");
12
+ DeclareCategory("IsFreeBandCategory", IsSemigroup and IsBand);
13
+ DeclareProperty("IsFreeBand", IsSemigroup);
14
+ DeclareSynonym("IsFreeBandSubsemigroup",
15
+ IsSemigroup and IsFreeBandElementCollection);
16
+
17
+ DeclareGlobalFunction("FreeBand");
18
+ DeclareAttribute("ContentOfFreeBandElement", IsFreeBandElement);
19
+ DeclareAttribute("ContentOfFreeBandElementCollection",
20
+ IsFreeBandElementCollection);
21
+
22
+ DeclareOperation("EqualInFreeBand", [IsList, IsList]);
@@ -0,0 +1,502 @@
1
+ ###############################################################################
2
+ ##
3
+ ## fp/freeband.gi
4
+ ## Copyright (C) 2013-2022 Julius Jonusas
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ ###############################################################################
9
+
10
+ # TODO(later): this is not really finished.
11
+
12
+ # TODO(later)
13
+ # InstallMethod(FreeBandOfFreeBandElement,
14
+
15
+ InstallMethod(ContentOfFreeBandElement, "for a free band element",
16
+ [IsFreeBandElement],
17
+ w -> ListBlist([1 .. Length(w!.cont)], w!.cont));
18
+
19
+ InstallMethod(ContentOfFreeBandElementCollection,
20
+ "for a free band element collection",
21
+ [IsFreeBandElementCollection],
22
+ function(coll)
23
+ local n, content, w;
24
+
25
+ n := Length(coll[1]!.cont);
26
+ content := BlistList([1 .. n], []);
27
+
28
+ for w in coll do
29
+ UniteBlist(content, w!.cont);
30
+ if SizeBlist(content) = n then
31
+ break;
32
+ fi;
33
+ od;
34
+
35
+ return ListBlist([1 .. n], content);
36
+ end);
37
+
38
+ ###############################################################################
39
+ ## Internal
40
+ ###############################################################################
41
+
42
+ SEMIGROUPS.FreeBandElmToWord := function(elem)
43
+ local tuple, out, first, pre_tuple, last, su_tuple, word1, word2;
44
+
45
+ tuple := elem!.tuple;
46
+
47
+ if elem!.word <> fail then
48
+ return elem!.word;
49
+ elif tuple![2] = 0 then # tuple corresponds to one the generators
50
+ out := [tuple![1]];
51
+ else
52
+ first := tuple![1];
53
+ pre_tuple := tuple![2]; # tuple corresponding to the prefix
54
+ last := tuple![3];
55
+ su_tuple := tuple![4]; # tuple corresponding to the suffix
56
+
57
+ # if first = last we only need a single letter
58
+ if first = last then
59
+ out := Concatenation(SEMIGROUPS.FreeBandElmToWord(pre_tuple), [first],
60
+ SEMIGROUPS.FreeBandElmToWord(su_tuple));
61
+ # otherwise we need distinct letters for both first and last
62
+ else
63
+ word1 := Concatenation(SEMIGROUPS.FreeBandElmToWord(pre_tuple), [first]);
64
+ word2 := Concatenation([last], SEMIGROUPS.FreeBandElmToWord(su_tuple));
65
+ if word1 = word2 then
66
+ out := word1;
67
+ else
68
+ out := Concatenation(word1, word2);
69
+ fi;
70
+ fi;
71
+ fi;
72
+ elem!.word := out;
73
+ return out;
74
+ end;
75
+
76
+ SEMIGROUPS.HashFunctionForFreeBandElements := function(x, data)
77
+ return ORB_HashFunctionForPlainFlatList(SEMIGROUPS.FreeBandElmToWord(x),
78
+ data);
79
+ end;
80
+
81
+ InstallMethod(IsGeneratorsOfInverseSemigroup, "for a free band element coll",
82
+ [IsFreeBandElementCollection], ReturnFalse);
83
+
84
+ InstallTrueMethod(IsFinite, IsFreeBandSubsemigroup);
85
+
86
+ InstallGlobalFunction(FreeBand,
87
+ function(arg...)
88
+ local names, F, type, ngens, gens, filts, S, m;
89
+
90
+ # Get and check the argument list, and construct names if necessary.
91
+ if Length(arg) = 1 and IsInt(arg[1]) and 0 < arg[1] then
92
+ names := List([1 .. arg[1]],
93
+ i -> Concatenation("x", String(i)));
94
+ elif Length(arg) = 2 and IsInt(arg[1]) and 0 < arg[1]
95
+ and IsString(arg[2]) then
96
+ names := List([1 .. arg[1]],
97
+ i -> Concatenation(arg[2], String(i)));
98
+ elif 1 <= Length(arg) and ForAll(arg, IsString) then
99
+ names := arg;
100
+ elif Length(arg) = 1 and IsList(arg[1])
101
+ and ForAll(arg[1], IsString) then
102
+ names := arg[1];
103
+ else
104
+ ErrorNoReturn("FreeBand(<name1>,<name2>..) or FreeBand(<rank> [, name])");
105
+ fi;
106
+
107
+ MakeImmutable(names);
108
+
109
+ F := NewFamily("FreeBandElementsFamily", IsFreeBandElement,
110
+ CanEasilySortElements);
111
+
112
+ type := NewType(F, IsFreeBandElement and IsPositionalObjectRep);
113
+
114
+ ngens := Length(names);
115
+ gens := EmptyPlist(ngens);
116
+
117
+ for m in [1 .. ngens] do
118
+ gens[m] := Objectify(type, rec(tuple := [m, 0, m, 0],
119
+ cont := BlistList([1 .. ngens], [m]),
120
+ word := [m]));
121
+ od;
122
+
123
+ StoreInfoFreeMagma(F, names, IsFreeBandElement);
124
+
125
+ filts := IsFreeBandCategory and IsAttributeStoringRep and IsWholeFamily and
126
+ IsFreeBand;
127
+
128
+ S := Objectify(NewType(FamilyObj(gens), filts),
129
+ rec(opts := SEMIGROUPS.DefaultOptionsRec));
130
+
131
+ SetGeneratorsOfMagma(S, gens);
132
+
133
+ FamilyObj(S)!.semigroup := S;
134
+ F!.semigroup := S;
135
+
136
+ return S;
137
+ end);
138
+
139
+ InstallMethod(IsFreeBand, "for a semigroup", [IsSemigroup],
140
+ function(S)
141
+ local used, occurred, gens, max_d, g;
142
+
143
+ if not IsBand(S) then
144
+ return false;
145
+ elif IsFreeBandSubsemigroup(S) then
146
+ gens := Generators(S);
147
+ used := BlistList([1 .. Length(gens[1]!.cont)], []);
148
+ occurred := BlistList([1 .. Length(gens[1]!.cont)], []);
149
+ for g in gens do
150
+ used := IntersectionBlist(used, g!.cont);
151
+ if g!.tuple[2] = 0 then
152
+ occurred[g!.tuple[1]] := true;
153
+ fi;
154
+ od;
155
+ if used = occurred then
156
+ return true;
157
+ fi;
158
+ fi;
159
+
160
+ if not IsActingSemigroup(S) then
161
+ S := AsSemigroup(IsTransformationSemigroup, S);
162
+ fi;
163
+
164
+ max_d := MaximalDClasses(S);
165
+ return Size(S) = Size(FreeBand(Length(max_d)));
166
+ end);
167
+
168
+ InstallMethod(Iterator, "for a Greens D-class of a free band",
169
+ [IsFreeBandElementCollection and IsGreensDClass],
170
+ function(dclass)
171
+ local NextIterator_FreeBandDClass, NewIterator_FreeBandDClass,
172
+ ShallowCopyLocal, record, s, content, rep,
173
+ NextIterator_FreeBandDClassWithPrint;
174
+
175
+ s := Parent(dclass);
176
+ rep := Representative(dclass);
177
+ content := rep!.cont;
178
+
179
+ NextIterator_FreeBandDClass := function(iter)
180
+ local output, i, content, tempcont, tuple;
181
+
182
+ if iter!.element <> fail then
183
+ # output := StructuralCopy(iter!.element); doesn't work
184
+ output := rec(tuple := StructuralCopy(iter!.element!.tuple),
185
+ content := ShallowCopy(iter!.element!.content),
186
+ word := ShallowCopy(iter!.element!.word));
187
+ else
188
+ return fail;
189
+ fi;
190
+
191
+ content := iter!.content;
192
+ tuple := iter!.element!.tuple;
193
+ iter!.element!.word := fail;
194
+
195
+ if tuple[2] = 0 then
196
+ iter!.element := fail;
197
+ elif iter!.iter1!.element <> fail then
198
+ # Prefix word is not done yet
199
+ tuple[2] := NextIterator_FreeBandDClass(iter!.iter1);
200
+ iter!.element!.tuple := tuple;
201
+ elif Position(content, true, tuple[1]) <> fail then
202
+ # Update the first component
203
+ i := Position(content, true, tuple[1]);
204
+ tuple[1] := i;
205
+ tempcont := ShallowCopy(content);
206
+ tempcont[i] := false;
207
+ iter!.iter1 := NewIterator_FreeBandDClass(iter!.semigroup, tempcont);
208
+ tuple[2] := NextIterator_FreeBandDClass(iter!.iter1);
209
+ iter!.element!.tuple := tuple;
210
+ elif iter!.iter2!.element <> fail then
211
+ # Suffix word is not done yet
212
+ tuple[4] := NextIterator_FreeBandDClass(iter!.iter2);
213
+ iter!.element!.tuple := tuple;
214
+ # Restart the prefix
215
+ i := Position(content, true);
216
+ tuple[1] := i;
217
+ tempcont := ShallowCopy(content);
218
+ tempcont[i] := false;
219
+ iter!.iter1 := NewIterator_FreeBandDClass(iter!.semigroup, tempcont);
220
+ tuple[2] := NextIterator_FreeBandDClass(iter!.iter1);
221
+ iter!.element!.tuple := tuple;
222
+ elif Position(content, true, tuple[3]) <> fail then
223
+ # Update the third component
224
+ i := Position(content, true, tuple[3]);
225
+ tuple[3] := i;
226
+ tempcont := ShallowCopy(content);
227
+ tempcont[i] := false;
228
+ iter!.iter2 := NewIterator_FreeBandDClass(iter!.semigroup, tempcont);
229
+ tuple[4] := NextIterator_FreeBandDClass(iter!.iter2);
230
+ # Restart the prefix
231
+ i := Position(content, true);
232
+ tuple[1] := i;
233
+ tempcont := ShallowCopy(content);
234
+ tempcont[i] := false;
235
+ iter!.iter1 := NewIterator_FreeBandDClass(iter!.semigroup, tempcont);
236
+ tuple[2] := NextIterator_FreeBandDClass(iter!.iter1);
237
+ iter!.element!.tuple := tuple;
238
+ else
239
+ iter!.element := fail;
240
+ fi;
241
+ return output;
242
+ end;
243
+
244
+ NextIterator_FreeBandDClassWithPrint := function(iter)
245
+ local next_value;
246
+
247
+ next_value := NextIterator_FreeBandDClass(iter);
248
+
249
+ if next_value = fail then
250
+ return fail;
251
+ else
252
+ return Product(List(SEMIGROUPS.FreeBandElmToWord(next_value),
253
+ x -> GeneratorsOfSemigroup(iter!.semigroup)[x]));
254
+ fi;
255
+ end;
256
+
257
+ NewIterator_FreeBandDClass := function(s, content)
258
+ local record, first, tempcont, elem;
259
+
260
+ first := Position(content, true);
261
+ elem := Objectify(TypeObj(s.1), rec(tuple := [],
262
+ content := content,
263
+ word := fail));
264
+
265
+ # If the content is of size one
266
+ if Position(content, true, first) = fail then
267
+ elem!.tuple := [first, 0, first, 0];
268
+ elem!.word := [first];
269
+ record := rec(element := elem,
270
+ iter1 := fail,
271
+ iter2 := fail,
272
+ semigroup := s,
273
+ content := content) ;
274
+ else
275
+ tempcont := ShallowCopy(content);
276
+ tempcont[first] := false;
277
+ record := rec(element := elem,
278
+ iter1 := NewIterator_FreeBandDClass(s, tempcont),
279
+ iter2 := NewIterator_FreeBandDClass(s, tempcont),
280
+ semigroup := s,
281
+ content := content);
282
+ record!.element!.tuple := [first,
283
+ NextIterator_FreeBandDClass(record!.iter1),
284
+ first,
285
+ NextIterator_FreeBandDClass(record!.iter2)];
286
+ fi;
287
+ return record;
288
+ end;
289
+
290
+ ShallowCopyLocal := function(it)
291
+ local record;
292
+ record := NewIterator_FreeBandDClass(s, content);
293
+ record.NextIterator := it!.NextIterator;
294
+ record.ShallowCopy := it!.ShallowCopy;
295
+ return record;
296
+ end;
297
+
298
+ record := NewIterator_FreeBandDClass(s, content);
299
+ record.NextIterator := NextIterator_FreeBandDClassWithPrint;
300
+ record.ShallowCopy := ShallowCopyLocal;
301
+ return IteratorByNextIterator(record);
302
+ end);
303
+
304
+ InstallMethod(GreensDClassOfElement, "for a free band and element",
305
+ [IsFreeBandCategory, IsFreeBandElement],
306
+ function(S, x)
307
+ local filt, type, D;
308
+ if not x in S then
309
+ ErrorNoReturn("the 2nd argument (a free band element) does not ",
310
+ "belong to 1st argument (a free band category)");
311
+ fi;
312
+
313
+ filt := IsEquivalenceClass and IsEquivalenceClassDefaultRep
314
+ and IsGreensDClass;
315
+
316
+ if Length(GeneratorsOfSemigroup(S)) < 4 then
317
+ filt := filt and IsGreensClassOfSemigroupThatCanUseFroidurePinRep;
318
+ fi;
319
+
320
+ type := NewType(FamilyObj(S), filt);
321
+ D := Objectify(type, rec());
322
+ SetParent(D, S);
323
+ SetRepresentative(D, x);
324
+ SetEquivalenceClassRelation(D, GreensDRelation(S));
325
+
326
+ return D;
327
+ end);
328
+
329
+ InstallMethod(ViewString, "for a free band element",
330
+ [IsFreeBandElement], PrintString);
331
+
332
+ InstallMethod(PrintString, "for a free band element",
333
+ [IsFreeBandElement],
334
+ function(elem)
335
+ return Concatenation(List(SEMIGROUPS.FreeBandElmToWord(elem),
336
+ x -> FamilyObj(elem)!.names[x]));
337
+ end);
338
+
339
+ InstallMethod(ViewObj, "for a free band",
340
+ [IsFreeBandCategory],
341
+ function(S)
342
+ if GAPInfo.ViewLength * 10 < Length(GeneratorsOfMagma(S)) then
343
+ Print("<free band with ", Length(GeneratorsOfSemigroup(S)),
344
+ " generators>");
345
+ else
346
+ Print("<free band on the generators ",
347
+ GeneratorsOfSemigroup(S), ">");
348
+ fi;
349
+ end);
350
+
351
+ InstallMethod(EqualInFreeBand, "for two strings",
352
+ [IsString, IsString],
353
+ function(w1_in, w2_in)
354
+ if IsEmpty(w1_in) or IsEmpty(w2_in) then
355
+ return IsEmpty(w1_in) and IsEmpty(w2_in);
356
+ # Necessary since [] is recognised as a string yet the below
357
+ # doesn't work with it.
358
+ fi;
359
+ w1_in := List(w1_in, IntChar);
360
+ w2_in := List(w2_in, IntChar);
361
+ return EqualInFreeBand(w1_in, w2_in);
362
+ end);
363
+
364
+ # This is an implementation of the algorithm described in Jakub Radoszewski
365
+ # and Wojciech Rytter's paper 'Efficient Testing of Equivalence of Words
366
+ # in a Free Idempotent Semigroup⋆'
367
+
368
+ InstallMethod(EqualInFreeBand, "for two lists of positive integers",
369
+ [IsHomogeneousList, IsHomogeneousList],
370
+ {w1_in, w2_in} -> libsemigroups.freeband_equal_to(w1_in, w2_in));
371
+
372
+ # TODO(later) Is there a more efficient way to compare elements? JJ
373
+
374
+ InstallMethod(\=, "for elements of a free band",
375
+ IsIdenticalObj, [IsFreeBandElement, IsFreeBandElement],
376
+ function(x, y)
377
+ local i;
378
+
379
+ if x!.cont <> y!.cont then
380
+ return false;
381
+ fi;
382
+ for i in [1 .. 4] do
383
+ if x!.tuple![i] <> y!.tuple![i] then
384
+ return false;
385
+ fi;
386
+ od;
387
+ return true;
388
+ end);
389
+
390
+ # TODO(later) Is it possible to find a non recursive way to compare elements?
391
+ # JJ
392
+
393
+ InstallMethod(\<, "for elements of a free band",
394
+ IsIdenticalObj, [IsFreeBandElement, IsFreeBandElement],
395
+ function(x, y)
396
+ local i, tuple1, tuple2;
397
+
398
+ tuple1 := x!.tuple;
399
+ tuple2 := y!.tuple;
400
+
401
+ i := 1;
402
+ while i <= 3 and tuple1![i] = tuple2![i] do
403
+ i := i + 1;
404
+ od;
405
+
406
+ if tuple2[i] = 0 then
407
+ return false;
408
+ elif tuple1[i] = 0 then
409
+ return true;
410
+ fi;
411
+ return tuple1[i] < tuple2[i];
412
+ end);
413
+
414
+ InstallMethod(\*, "for elements of a free band", IsIdenticalObj,
415
+ [IsFreeBandElement, IsFreeBandElement],
416
+ function(x, y)
417
+ local type, out, diff, new_first, new_prefix, new_last, new_sufix, copy;
418
+
419
+ type := TypeObj(x);
420
+ # if the content of two elements is the same we only need the prefix of the
421
+ # first and the suffix of the second one
422
+ # cont = blist
423
+ if IsSubsetBlist(x!.cont, y!.cont) then
424
+ out := [x!.tuple[1], x!.tuple[2]];
425
+ else
426
+ diff := DifferenceBlist(y!.cont, x!.cont);
427
+ # new_first is the last letter to occur first in the product
428
+ new_first := y!.tuple[1];
429
+ new_prefix := y!.tuple[2];
430
+ while true do
431
+ if diff[new_first] and new_prefix = 0 then
432
+ copy := ShallowCopy(x); # are shallow copies necessary?
433
+ out := [new_first, copy];
434
+ break;
435
+ elif diff[new_first] then
436
+ copy := ShallowCopy(x * new_prefix);
437
+ out := [new_first, copy];
438
+ break;
439
+ else
440
+ new_first := new_prefix!.tuple[1];
441
+ new_prefix := new_prefix!.tuple[2];
442
+ fi;
443
+ od;
444
+ fi;
445
+
446
+ if IsSubsetBlist(y!.cont, x!.cont) then
447
+ out{[3, 4]} := [y!.tuple[3], y!.tuple[4]];
448
+ else
449
+ diff := DifferenceBlist(x!.cont, y!.cont);
450
+ # new_last is the first letter to occur for the last time in the product
451
+ new_last := x!.tuple[3];
452
+ new_sufix := x!.tuple[4];
453
+ repeat
454
+ if diff[new_last] and new_sufix = 0 then
455
+ copy := ShallowCopy(y);
456
+ out{[3 .. 4]} := [new_last, copy];
457
+ break;
458
+ elif diff[new_last] then
459
+ copy := ShallowCopy(new_sufix * y);
460
+ out{[3, 4]} := [new_last, copy];
461
+ break;
462
+ else
463
+ new_last := new_sufix!.tuple[3];
464
+ new_sufix := new_sufix!.tuple[4];
465
+ fi;
466
+ until IsBound(out[3]);
467
+ fi;
468
+
469
+ return Objectify(type, rec(tuple := out,
470
+ cont := UnionBlist(x!.cont, y!.cont),
471
+ word := fail));
472
+ end);
473
+
474
+ InstallMethod(Size, "for a free band",
475
+ [IsFreeBandCategory and IsFinite and HasGeneratorsOfSemigroup],
476
+ function(S)
477
+ local c, output, k, i, n;
478
+
479
+ n := Length(FamilyObj(S.1)!.names);
480
+
481
+ c := [];
482
+ for k in [1 .. n] do
483
+ c[k] := 1;
484
+ for i in [1 .. k - 1] do
485
+ c[k] := c[k] * (k - i + 1) ^ (2 ^ i);
486
+ od;
487
+ od;
488
+
489
+ output := 0;
490
+ for k in [1 .. n] do
491
+ output := output + Binomial(n, k) * c[k];
492
+ od;
493
+
494
+ return output;
495
+ end);
496
+
497
+ InstallMethod(ChooseHashFunction, "for a free band element and int",
498
+ [IsFreeBandElement, IsInt],
499
+ function(_, hashlen)
500
+ return rec(func := SEMIGROUPS.HashFunctionForFreeBandElements,
501
+ data := hashlen);
502
+ end);
@@ -0,0 +1,30 @@
1
+ ###############################################################################
2
+ ##
3
+ ## fp/freeinverse.gd
4
+ ## Copyright (C) 2013-2022 Julius Jonusas
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ ###############################################################################
9
+
10
+ DeclareUserPreference(rec(
11
+ name := "FreeInverseSemigroupElementDisplay",
12
+ description := ["options for the display of free inverse semigroup elements"],
13
+ default := "minimal",
14
+ values := ["minimal", "canonical"],
15
+ multi := false,
16
+ package := "semigroups"));
17
+
18
+ DeclareCategory("IsFreeInverseSemigroupElement", IsAssociativeElement);
19
+ DeclareCategoryCollections("IsFreeInverseSemigroupElement");
20
+
21
+ DeclareCategory("IsFreeInverseSemigroupCategory",
22
+ IsInverseSemigroup
23
+ and IsGeneratorsOfInverseSemigroup
24
+ and IsFreeInverseSemigroupElementCollection);
25
+ DeclareProperty("IsFreeInverseSemigroup", IsSemigroup);
26
+
27
+ DeclareGlobalFunction("FreeInverseSemigroup");
28
+
29
+ DeclareAttribute("MinimalWord", IsFreeInverseSemigroupElement);
30
+ DeclareAttribute("CanonicalForm", IsFreeInverseSemigroupElement);