passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-musllinux_1_2_x86_64.whl

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

Potentially problematic release.


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

Files changed (356) hide show
  1. gap/pkg/semigroups/CHANGELOG.md +1699 -0
  2. gap/pkg/semigroups/CONTRIBUTING.md +91 -0
  3. gap/pkg/semigroups/GNUmakefile +110 -0
  4. gap/pkg/semigroups/GNUmakefile.in +110 -0
  5. gap/pkg/semigroups/GPL +674 -0
  6. gap/pkg/semigroups/LICENSE +16 -0
  7. gap/pkg/semigroups/Makefile +26 -0
  8. gap/pkg/semigroups/Makefile.gappkg +225 -0
  9. gap/pkg/semigroups/PackageInfo.g +529 -0
  10. gap/pkg/semigroups/README.md +102 -0
  11. gap/pkg/semigroups/VERSIONS +112 -0
  12. gap/pkg/semigroups/aclocal.m4 +375 -0
  13. gap/pkg/semigroups/autogen.sh +25 -0
  14. gap/pkg/semigroups/bin/x86_64-pc-linux-musl-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1068 -0
  17. gap/pkg/semigroups/config.status +1133 -0
  18. gap/pkg/semigroups/config.sub +1960 -0
  19. gap/pkg/semigroups/configure +9742 -0
  20. gap/pkg/semigroups/configure.ac +71 -0
  21. gap/pkg/semigroups/data/doc/greens.pickle +1 -0
  22. gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
  23. gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
  24. gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
  25. gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
  26. gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
  27. gap/pkg/semigroups/data/tst/bipart4 +10 -0
  28. gap/pkg/semigroups/data/tst/pperm10 +1 -0
  29. gap/pkg/semigroups/data/tst/tables.gz +0 -0
  30. gap/pkg/semigroups/data/tst/testdata +1 -0
  31. gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
  32. gap/pkg/semigroups/data/tst/trans3 +7 -0
  33. gap/pkg/semigroups/data/tst/trans3-old +7 -0
  34. gap/pkg/semigroups/environment.yml +7 -0
  35. gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
  36. gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
  37. gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
  38. gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
  39. gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
  40. gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
  41. gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
  42. gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
  43. gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
  44. gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
  45. gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
  46. gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
  47. gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
  48. gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
  49. gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
  50. gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
  51. gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
  52. gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
  53. gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
  54. gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
  55. gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
  56. gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
  57. gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
  58. gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
  59. gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
  60. gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
  61. gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
  62. gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
  63. gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
  64. gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
  65. gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
  66. gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
  67. gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
  68. gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
  69. gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
  70. gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
  71. gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
  72. gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
  73. gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
  74. gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
  75. gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
  76. gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
  77. gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
  78. gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
  79. gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
  80. gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
  81. gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
  82. gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
  83. gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
  84. gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
  85. gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
  86. gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
  87. gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
  88. gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
  89. gap/pkg/semigroups/gap/elements/elements.gd +11 -0
  90. gap/pkg/semigroups/gap/elements/elements.gi +121 -0
  91. gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
  92. gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
  93. gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
  94. gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
  95. gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
  96. gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
  97. gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
  98. gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
  99. gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
  100. gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
  101. gap/pkg/semigroups/gap/elements/star.gd +21 -0
  102. gap/pkg/semigroups/gap/elements/star.gi +21 -0
  103. gap/pkg/semigroups/gap/elements/trans.gd +13 -0
  104. gap/pkg/semigroups/gap/elements/trans.gi +50 -0
  105. gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
  106. gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
  107. gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
  108. gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
  109. gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
  110. gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
  111. gap/pkg/semigroups/gap/fp/word.gd +15 -0
  112. gap/pkg/semigroups/gap/fp/word.gi +67 -0
  113. gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
  114. gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
  115. gap/pkg/semigroups/gap/greens/acting.gd +81 -0
  116. gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
  117. gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
  118. gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
  119. gap/pkg/semigroups/gap/greens/generic.gd +117 -0
  120. gap/pkg/semigroups/gap/greens/generic.gi +630 -0
  121. gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
  122. gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
  123. gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
  124. gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
  125. gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
  126. gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
  127. gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
  128. gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
  129. gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
  130. gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
  131. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
  132. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
  133. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
  134. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
  135. gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
  136. gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
  137. gap/pkg/semigroups/gap/main/acting.gd +36 -0
  138. gap/pkg/semigroups/gap/main/acting.gi +779 -0
  139. gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
  140. gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
  141. gap/pkg/semigroups/gap/main/graded.gd +26 -0
  142. gap/pkg/semigroups/gap/main/graded.gi +355 -0
  143. gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
  144. gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
  145. gap/pkg/semigroups/gap/main/orbits.gd +24 -0
  146. gap/pkg/semigroups/gap/main/orbits.gi +512 -0
  147. gap/pkg/semigroups/gap/main/semiact.gd +20 -0
  148. gap/pkg/semigroups/gap/main/semiact.gi +821 -0
  149. gap/pkg/semigroups/gap/main/setup.gd +61 -0
  150. gap/pkg/semigroups/gap/main/setup.gi +1094 -0
  151. gap/pkg/semigroups/gap/obsolete.gd +9 -0
  152. gap/pkg/semigroups/gap/obsolete.gi +14 -0
  153. gap/pkg/semigroups/gap/options.g +55 -0
  154. gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
  155. gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
  156. gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
  157. gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
  158. gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
  159. gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
  160. gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
  161. gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
  162. gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
  163. gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
  164. gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
  165. gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
  166. gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
  167. gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
  168. gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
  169. gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
  170. gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
  171. gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
  172. gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
  173. gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
  174. gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
  175. gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
  176. gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
  177. gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
  178. gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
  179. gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
  180. gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
  181. gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
  182. gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
  183. gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
  184. gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
  185. gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
  186. gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
  187. gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
  188. gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
  189. gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
  190. gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
  191. gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
  192. gap/pkg/semigroups/gap/tools/display.gd +24 -0
  193. gap/pkg/semigroups/gap/tools/display.gi +749 -0
  194. gap/pkg/semigroups/gap/tools/io.gd +17 -0
  195. gap/pkg/semigroups/gap/tools/io.gi +543 -0
  196. gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
  197. gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
  198. gap/pkg/semigroups/gap/tools/utils.gd +19 -0
  199. gap/pkg/semigroups/gap/tools/utils.gi +756 -0
  200. gap/pkg/semigroups/gapbind14/.ccls +18 -0
  201. gap/pkg/semigroups/gapbind14/.clang-format +104 -0
  202. gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
  203. gap/pkg/semigroups/gapbind14/LICENSE +674 -0
  204. gap/pkg/semigroups/gapbind14/README.md +76 -0
  205. gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
  206. gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
  207. gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
  208. gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
  209. gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
  210. gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
  211. gap/pkg/semigroups/gapbind14/demo/configure +34 -0
  212. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
  213. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
  214. gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
  215. gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
  216. gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
  217. gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
  218. gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
  219. gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
  220. gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
  221. gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
  222. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
  223. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
  224. gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
  225. gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
  226. gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
  227. gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
  228. gap/pkg/semigroups/init.g +150 -0
  229. gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
  230. gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
  231. gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
  232. gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
  233. gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
  234. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
  235. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
  236. gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
  237. gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
  238. gap/pkg/semigroups/m4/find_gap.m4 +94 -0
  239. gap/pkg/semigroups/makedoc.g +153 -0
  240. gap/pkg/semigroups/prerequisites.sh +62 -0
  241. gap/pkg/semigroups/read.g +105 -0
  242. gap/pkg/semigroups/release.toml +6 -0
  243. gap/pkg/semigroups/tst/extreme/README +2 -0
  244. gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
  245. gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
  246. gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
  247. gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
  248. gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
  249. gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
  250. gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
  251. gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
  252. gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
  253. gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
  254. gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
  255. gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
  256. gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
  257. gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
  258. gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
  259. gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
  260. gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
  261. gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
  262. gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
  263. gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
  264. gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
  265. gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
  266. gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
  267. gap/pkg/semigroups/tst/standard/README +2 -0
  268. gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
  269. gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
  270. gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
  271. gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
  272. gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
  273. gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
  274. gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
  275. gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
  276. gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
  277. gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
  278. gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
  279. gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
  280. gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
  281. gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
  282. gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
  283. gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
  284. gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
  285. gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
  286. gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
  287. gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
  288. gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
  289. gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
  290. gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
  291. gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
  292. gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
  293. gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
  294. gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
  295. gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
  296. gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
  297. gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
  298. gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
  299. gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
  300. gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
  301. gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
  302. gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
  303. gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
  304. gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
  305. gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
  306. gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
  307. gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
  308. gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
  309. gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
  310. gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
  311. gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
  312. gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
  313. gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
  314. gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
  315. gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
  316. gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
  317. gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
  318. gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
  319. gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
  320. gap/pkg/semigroups/tst/standard/options.tst +54 -0
  321. gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
  322. gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
  323. gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
  324. gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
  325. gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
  326. gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
  327. gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
  328. gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
  329. gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
  330. gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
  331. gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
  332. gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
  333. gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
  334. gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
  335. gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
  336. gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
  337. gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
  338. gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
  339. gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
  340. gap/pkg/semigroups/tst/testinstall.tst +1815 -0
  341. gap/pkg/semigroups/tst/teststandard.g +22 -0
  342. gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
  343. gap/pkg/semigroups/tst/workspaces/load.g +11 -0
  344. gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
  345. gap/pkg/semigroups/tst/workspaces/save.g +14 -0
  346. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA +93 -0
  347. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
  348. passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +356 -0
  349. passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +5 -0
  350. passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.libs/libgcc_s-0cd532bd.so.1 +0 -0
  352. passagemath_gap_pkg_semigroups.libs/libsemigroups-f0b7066b.so.2.0.0 +0 -0
  353. passagemath_gap_pkg_semigroups.libs/libstdc++-5d72f927.so.6.0.33 +0 -0
  354. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  355. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  356. sage/libs/gap_pkg_semigroups.abi3.so +0 -0
@@ -0,0 +1,710 @@
1
+ ############################################################################
2
+ ##
3
+ ## semigroups/semimaxplus.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
+ # This file contains implementations for semigroups of max-plus, min-plus,
12
+ # tropical max-plus, and tropical min-plus matrices.
13
+
14
+ #############################################################################
15
+ ## Random inverse semigroups and monoids, no better method currently
16
+ #############################################################################
17
+
18
+ for _IsXMatrix in ["IsMaxPlusMatrix",
19
+ "IsMinPlusMatrix",
20
+ "IsTropicalMaxPlusMatrix",
21
+ "IsTropicalMinPlusMatrix",
22
+ "IsProjectiveMaxPlusMatrix",
23
+ "IsNTPMatrix",
24
+ "IsIntegerMatrix"] do
25
+
26
+ _IsXSemigroup := Concatenation(_IsXMatrix, "Semigroup");
27
+ _IsXMonoid := Concatenation(_IsXMatrix, "Monoid");
28
+
29
+ InstallMethod(RandomInverseSemigroupCons,
30
+ Concatenation("for ", _IsXSemigroup, " and a list"),
31
+ [ValueGlobal(_IsXSemigroup), IsList],
32
+ SEMIGROUPS.DefaultRandomInverseSemigroup);
33
+
34
+ InstallMethod(RandomInverseMonoidCons,
35
+ Concatenation("for ", _IsXMonoid, " and a list"),
36
+ [ValueGlobal(_IsXMonoid), IsList],
37
+ SEMIGROUPS.DefaultRandomInverseMonoid);
38
+
39
+ od;
40
+
41
+ Unbind(_IsXMatrix);
42
+ Unbind(_IsXMonoid);
43
+ Unbind(_IsXSemigroup);
44
+
45
+ #############################################################################
46
+ ## Random for matrices with 0 additional parameters
47
+ #############################################################################
48
+
49
+ _InstallRandom0 := function(params)
50
+ local IsXMatrix, FilterPlaceHolder, IsXSemigroup, IsXMonoid;
51
+
52
+ if not IsString(params) then
53
+ IsXMatrix := params[1];
54
+ FilterPlaceHolder := params[2];
55
+ else
56
+ IsXMatrix := params;
57
+ FilterPlaceHolder := params;
58
+ fi;
59
+
60
+ IsXSemigroup := Concatenation(IsXMatrix, "Semigroup");
61
+ IsXMonoid := Concatenation(IsXMatrix, "Monoid");
62
+
63
+ InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
64
+ [ValueGlobal(IsXSemigroup), IsList],
65
+ {_, params} -> SEMIGROUPS_ProcessRandomArgsCons(IsSemigroup, params));
66
+
67
+ InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
68
+ [ValueGlobal(IsXMonoid), IsList],
69
+ {_, params} -> SEMIGROUPS_ProcessRandomArgsCons(IsSemigroup, params));
70
+
71
+ InstallMethod(RandomSemigroupCons,
72
+ Concatenation("for ", IsXSemigroup, " and a list"),
73
+ [ValueGlobal(IsXSemigroup), IsList],
74
+ function(_, params)
75
+ return Semigroup(List([1 .. params[1]],
76
+ i -> RandomMatrix(ValueGlobal(FilterPlaceHolder),
77
+ params[2])));
78
+ end);
79
+
80
+ InstallMethod(RandomMonoidCons,
81
+ Concatenation("for ", IsXMonoid, " and a list"),
82
+ [ValueGlobal(IsXMonoid), IsList],
83
+ function(_, params)
84
+ return Monoid(List([1 .. params[1]],
85
+ i -> RandomMatrix(ValueGlobal(FilterPlaceHolder),
86
+ params[2])));
87
+ end);
88
+ end;
89
+
90
+ for _IsXMatrix in ["IsMaxPlusMatrix",
91
+ "IsMinPlusMatrix",
92
+ ["IsIntegerMatrix", "Integers"],
93
+ "IsProjectiveMaxPlusMatrix"] do
94
+ _InstallRandom0(_IsXMatrix);
95
+ od;
96
+
97
+ Unbind(_IsXMatrix);
98
+ Unbind(_InstallRandom0);
99
+
100
+ #############################################################################
101
+ ## Random for matrices with 1 additional parameters
102
+ #############################################################################
103
+
104
+ _ProcessArgs1 := function(_, params)
105
+ if Length(params) < 1 then # nr gens
106
+ params[1] := Random(1, 20);
107
+ elif not IsPosInt(params[1]) then
108
+ return "the 2nd argument (number of generators) must be a pos int";
109
+ fi;
110
+
111
+ if Length(params) < 2 then # degree / dimension
112
+ params[2] := Random(1, 20);
113
+ fi;
114
+
115
+ if not IsPosInt(params[2]) then
116
+ return "the 3rd argument (matrix dimension) must be a pos int";
117
+ elif Length(params) < 3 then # threshold
118
+ params[3] := Random(1, 20);
119
+ fi;
120
+
121
+ if not IsPosInt(params[3]) then
122
+ return "the 4th argument (semiring threshold) must be a pos int";
123
+ elif Length(params) > 3 then
124
+ return "there must be at most four arguments";
125
+ fi;
126
+ return params;
127
+ end;
128
+
129
+ _InstallRandom1 := function(IsXMatrix)
130
+ local IsXSemigroup, IsXMonoid;
131
+
132
+ IsXSemigroup := Concatenation(IsXMatrix, "Semigroup");
133
+ IsXMonoid := Concatenation(IsXMatrix, "Monoid");
134
+
135
+ InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
136
+ [ValueGlobal(IsXSemigroup), IsList], _ProcessArgs1);
137
+
138
+ InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
139
+ [ValueGlobal(IsXMonoid), IsList], _ProcessArgs1);
140
+
141
+ InstallMethod(RandomSemigroupCons,
142
+ Concatenation("for ", IsXSemigroup, " and a list"),
143
+ [ValueGlobal(IsXSemigroup), IsList],
144
+ function(_, params)
145
+ return Semigroup(List([1 .. params[1]],
146
+ i -> RandomMatrix(ValueGlobal(IsXMatrix),
147
+ params[2],
148
+ params[3])));
149
+ end);
150
+
151
+ InstallMethod(RandomMonoidCons,
152
+ Concatenation("for ", IsXMonoid, " and a list"),
153
+ [ValueGlobal(IsXMonoid), IsList],
154
+ function(_, params)
155
+ return Monoid(List([1 .. params[1]],
156
+ i -> RandomMatrix(ValueGlobal(IsXMatrix),
157
+ params[2],
158
+ params[3])));
159
+ end);
160
+ end;
161
+
162
+ for _IsXMatrix in ["IsTropicalMaxPlusMatrix",
163
+ "IsTropicalMinPlusMatrix"] do
164
+ _InstallRandom1(_IsXMatrix);
165
+ od;
166
+
167
+ Unbind(_IsXMatrix);
168
+ Unbind(_InstallRandom1);
169
+ Unbind(_ProcessArgs1);
170
+
171
+ #############################################################################
172
+ ## Random for matrices with 2 additional parameters
173
+ #############################################################################
174
+
175
+ InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
176
+ [IsNTPMatrixSemigroup, IsList],
177
+ function(_, params)
178
+ if Length(params) < 1 then # nr gens
179
+ params[1] := Random(1, 20);
180
+ elif not IsPosInt(params[1]) then
181
+ return "the 2nd argument (number of generators) must be a pos int";
182
+ fi;
183
+ if Length(params) < 2 then # dimension
184
+ params[2] := Random(1, 20);
185
+ elif not IsPosInt(params[2]) then
186
+ return "the 3rd argument (matrix dimension) must be a pos int";
187
+ fi;
188
+ if Length(params) < 3 then # threshold
189
+ params[3] := Random(1, 20);
190
+ elif not IsPosInt(params[3]) then
191
+ return "the 4th argument (semiring threshold) must be a pos int";
192
+ fi;
193
+ if Length(params) < 4 then # period
194
+ params[4] := Random(1, 20);
195
+ elif not IsPosInt(params[4]) then
196
+ return "the 5th argument (semiring period) must be a pos int";
197
+ fi;
198
+ if Length(params) > 4 then
199
+ return "there must be at most 5 arguments";
200
+ fi;
201
+
202
+ return params;
203
+ end);
204
+
205
+ InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
206
+ [IsNTPMatrixMonoid, IsList], {filt, params}
207
+ -> SEMIGROUPS_ProcessRandomArgsCons(IsNTPMatrixSemigroup, params));
208
+
209
+ InstallMethod(RandomSemigroupCons,
210
+ "for IsNTPMatrixSemigroup and a list",
211
+ [IsNTPMatrixSemigroup, IsList],
212
+ function(_, params)
213
+ return Semigroup(List([1 .. params[1]],
214
+ i -> RandomMatrix(IsNTPMatrix,
215
+ params[2],
216
+ params[3],
217
+ params[4])));
218
+ end);
219
+
220
+ InstallMethod(RandomMonoidCons,
221
+ "for IsNTPMatrixMonoid and a list",
222
+ [IsNTPMatrixMonoid, IsList],
223
+ function(_, params)
224
+ return Monoid(List([1 .. params[1]],
225
+ i -> RandomMatrix(IsNTPMatrix,
226
+ params[2],
227
+ params[3],
228
+ params[4])));
229
+ end);
230
+
231
+ #############################################################################
232
+ ## 1. Isomorphisms
233
+ #############################################################################
234
+
235
+ #############################################################################
236
+ ## Isomorphism from an arbitrary semigroup to a matrix semigroup, via a
237
+ ## transformation semigroup
238
+ #############################################################################
239
+
240
+ # 0 additional parameters
241
+
242
+ for _IsXMatrix in ["IsMaxPlusMatrix",
243
+ "IsMinPlusMatrix",
244
+ "IsIntegerMatrix",
245
+ "IsProjectiveMaxPlusMatrix"] do
246
+
247
+ _IsXSemigroup := Concatenation(_IsXMatrix, "Semigroup");
248
+
249
+ InstallMethod(IsomorphismSemigroup,
250
+ Concatenation("for ", _IsXSemigroup, " and a semigroup"),
251
+ [ValueGlobal(_IsXSemigroup), IsSemigroup],
252
+ SEMIGROUPS.DefaultIsomorphismSemigroup);
253
+
254
+ InstallMethod(IsomorphismSemigroup,
255
+ Concatenation("for ", _IsXSemigroup, " and a ", _IsXSemigroup),
256
+ [ValueGlobal(_IsXSemigroup), ValueGlobal(_IsXSemigroup)],
257
+ {filter, S} -> SemigroupIsomorphismByFunctionNC(S, S, IdFunc, IdFunc));
258
+
259
+ od;
260
+
261
+ Unbind(_IsXMatrix);
262
+ Unbind(_IsXSemigroup);
263
+
264
+ # 1 additional parameters
265
+
266
+ for _IsXMatrix in ["IsTropicalMaxPlusMatrix",
267
+ "IsTropicalMinPlusMatrix"] do
268
+
269
+ _IsXSemigroup := Concatenation(_IsXMatrix, "Semigroup");
270
+
271
+ InstallMethod(IsomorphismSemigroup,
272
+ Concatenation("for ", _IsXSemigroup, ", pos int, and a semigroup"),
273
+ [ValueGlobal(_IsXSemigroup), IsPosInt, IsSemigroup],
274
+ function(filter, threshold, S)
275
+ local iso1, inv1, iso2, inv2;
276
+
277
+ iso1 := IsomorphismTransformationSemigroup(S);
278
+ inv1 := InverseGeneralMapping(iso1);
279
+ iso2 := IsomorphismSemigroup(filter, threshold, Range(iso1));
280
+ inv2 := InverseGeneralMapping(iso2);
281
+
282
+ return SemigroupIsomorphismByFunctionNC(S,
283
+ Range(iso2),
284
+ x -> (x ^ iso1) ^ iso2,
285
+ x -> (x ^ inv2) ^ inv1);
286
+ end);
287
+
288
+ InstallMethod(IsomorphismSemigroup,
289
+ Concatenation("for ", _IsXSemigroup, ", and a semigroup"),
290
+ [ValueGlobal(_IsXSemigroup), IsSemigroup],
291
+ {filter, S} -> IsomorphismSemigroup(filter, 1, S));
292
+
293
+ InstallMethod(IsomorphismSemigroup,
294
+ Concatenation("for ", _IsXSemigroup, " and a ", _IsXSemigroup),
295
+ [ValueGlobal(_IsXSemigroup), IsPosInt, ValueGlobal(_IsXSemigroup)],
296
+ function(_, threshold, S)
297
+ if threshold = ThresholdTropicalMatrix(Representative(S)) then
298
+ return SemigroupIsomorphismByFunctionNC(S, S, IdFunc, IdFunc);
299
+ fi;
300
+ TryNextMethod();
301
+ end);
302
+ od;
303
+
304
+ Unbind(_IsXMatrix);
305
+ Unbind(_IsXSemigroup);
306
+
307
+ # 2 additional parameters
308
+
309
+ InstallMethod(IsomorphismSemigroup,
310
+ "for IsNTPMatrixSemigroup, pos int, pos int, and a semigroup",
311
+ [IsNTPMatrixSemigroup, IsPosInt, IsPosInt, IsSemigroup],
312
+ function(filter, threshold, period, S)
313
+ local iso1, inv1, iso2, inv2;
314
+
315
+ iso1 := IsomorphismTransformationSemigroup(S);
316
+ inv1 := InverseGeneralMapping(iso1);
317
+ iso2 := IsomorphismSemigroup(filter, threshold, period, Range(iso1));
318
+ inv2 := InverseGeneralMapping(iso2);
319
+
320
+ return SemigroupIsomorphismByFunctionNC(S,
321
+ Range(iso2),
322
+ x -> (x ^ iso1) ^ iso2,
323
+ x -> (x ^ inv2) ^ inv1);
324
+ end);
325
+
326
+ InstallMethod(IsomorphismSemigroup,
327
+ "for IsNTPMatrixSemigroup and a semigroup",
328
+ [IsNTPMatrixSemigroup, IsSemigroup],
329
+ {filter, S} -> IsomorphismSemigroup(IsNTPMatrixSemigroup, 1, 1, S));
330
+
331
+ InstallMethod(IsomorphismSemigroup,
332
+ "for IsNTPMatrixSemigroup, pos int, pos int, and a semigroup",
333
+ [IsNTPMatrixSemigroup, IsPosInt, IsPosInt, IsNTPMatrixSemigroup],
334
+ function(_, threshold, period, S)
335
+ if threshold = ThresholdNTPMatrix(Representative(S))
336
+ and period = PeriodNTPMatrix(Representative(S)) then
337
+ return SemigroupIsomorphismByFunctionNC(S, S, IdFunc, IdFunc);
338
+ fi;
339
+ TryNextMethod();
340
+ end);
341
+
342
+ #############################################################################
343
+ ## Isomorphism from a transformation semigroup to a matrix semigroup
344
+ ## 0 additional parameters!!!
345
+ #############################################################################
346
+
347
+ ## These are installed inside a function so that the value of IsXMatrix and
348
+ ## IsXSemigroup are retained as local variables.
349
+
350
+ _InstallAsMonoid := function(filter)
351
+ local IsXSemigroup, IsXMonoid;
352
+
353
+ IsXSemigroup := Concatenation(filter, "Semigroup");
354
+ IsXMonoid := Concatenation(filter, "Monoid");
355
+
356
+ InstallMethod(AsMonoid,
357
+ Concatenation("for a semigroup in ", IsXSemigroup),
358
+ [ValueGlobal(IsXSemigroup)],
359
+ function(S)
360
+ if MultiplicativeNeutralElement(S) = fail then
361
+ return fail; # so that we do the same as the GAP/ref manual says
362
+ fi;
363
+ return Range(IsomorphismMonoid(ValueGlobal(IsXMonoid), S));
364
+ end);
365
+ end;
366
+
367
+ for _IsXMatrix in ["IsMaxPlusMatrix",
368
+ "IsMinPlusMatrix",
369
+ "IsTropicalMaxPlusMatrix",
370
+ "IsTropicalMinPlusMatrix",
371
+ "IsProjectiveMaxPlusMatrix",
372
+ "IsNTPMatrix",
373
+ "IsIntegerMatrix"] do
374
+ _InstallAsMonoid(_IsXMatrix);
375
+ od;
376
+
377
+ Unbind(_IsXMatrix);
378
+ Unbind(_InstallAsMonoid);
379
+
380
+ ## These are installed inside a function so that the value of IsXMatrix and
381
+ ## IsXSemigroup are retained as local variables.
382
+
383
+ _InstallIsomorphism0 := function(filter)
384
+ local IsXMatrix, IsXSemigroup, IsXMonoid;
385
+
386
+ IsXMatrix := filter;
387
+ IsXSemigroup := Concatenation(filter, "Semigroup");
388
+ IsXMonoid := Concatenation(filter, "Monoid");
389
+
390
+ InstallMethod(IsomorphismMonoid,
391
+ Concatenation("for ", IsXMonoid, " and a semigroup"),
392
+ [ValueGlobal(IsXMonoid), IsSemigroup],
393
+ SEMIGROUPS.DefaultIsomorphismMonoid);
394
+
395
+ InstallMethod(IsomorphismMonoid,
396
+ Concatenation("for ", IsXMonoid, " and a monoid"),
397
+ [ValueGlobal(IsXMonoid), IsMonoid],
398
+ {filter, S} -> IsomorphismSemigroup(ValueGlobal(IsXSemigroup), S));
399
+
400
+ if IsXMatrix <> "IsIntegerMatrix" then
401
+ InstallMethod(IsomorphismSemigroup,
402
+ Concatenation("for ", IsXSemigroup,
403
+ " and a transformation semigroup with generators"),
404
+ [ValueGlobal(IsXSemigroup),
405
+ IsTransformationSemigroup and HasGeneratorsOfSemigroup],
406
+ function(_, S)
407
+ local n, map, T;
408
+
409
+ n := Maximum(DegreeOfTransformationSemigroup(S), 1);
410
+ map := x -> AsMatrix(ValueGlobal(IsXMatrix), x, n);
411
+ T := Semigroup(List(GeneratorsOfSemigroup(S), map));
412
+ UseIsomorphismRelation(S, T);
413
+
414
+ return SemigroupIsomorphismByFunctionNC(S,
415
+ T,
416
+ map,
417
+ AsTransformation);
418
+ end);
419
+ fi;
420
+ end;
421
+
422
+ for _IsXMatrix in ["IsMaxPlusMatrix",
423
+ "IsMinPlusMatrix",
424
+ "IsIntegerMatrix",
425
+ "IsProjectiveMaxPlusMatrix"] do
426
+ _InstallIsomorphism0(_IsXMatrix);
427
+ od;
428
+
429
+ Unbind(_IsXMatrix);
430
+ Unbind(_InstallIsomorphism0);
431
+
432
+ #############################################################################
433
+ ## Isomorphism from a transformation semigroup to a matrix semigroup
434
+ ## 1 additional parameters!!!
435
+ #############################################################################
436
+
437
+ # These are installed inside a function so that the value of IsXMatrix and
438
+ # IsXSemigroup are retained as a local variables.
439
+
440
+ _InstallIsomorphism1 := function(filter)
441
+ local IsXMatrix, IsXSemigroup, IsXMonoid;
442
+
443
+ IsXMatrix := filter;
444
+ IsXSemigroup := Concatenation(filter, "Semigroup");
445
+ IsXMonoid := Concatenation(filter, "Monoid");
446
+
447
+ InstallMethod(IsomorphismMonoid,
448
+ Concatenation("for ", IsXMonoid, ", pos int, and a semigroup"),
449
+ [ValueGlobal(IsXMonoid), IsPosInt, IsSemigroup],
450
+ function(filter, threshold, S)
451
+ local iso1, inv1, iso2, inv2;
452
+
453
+ iso1 := IsomorphismTransformationMonoid(S);
454
+ inv1 := InverseGeneralMapping(iso1);
455
+ iso2 := IsomorphismMonoid(filter, threshold, Range(iso1));
456
+ inv2 := InverseGeneralMapping(iso2);
457
+
458
+ return SemigroupIsomorphismByFunctionNC(S,
459
+ Range(iso2),
460
+ x -> (x ^ iso1) ^ iso2,
461
+ x -> (x ^ inv2) ^ inv1);
462
+ end);
463
+
464
+ InstallMethod(IsomorphismMonoid,
465
+ Concatenation("for ", IsXMonoid, " and a semigroup"),
466
+ [ValueGlobal(IsXMonoid), IsSemigroup],
467
+ {filter, S} -> IsomorphismMonoid(filter, 1, S));
468
+
469
+ InstallMethod(IsomorphismMonoid,
470
+ Concatenation("for ", IsXMonoid, ", and a semigroup in ", IsXSemigroup),
471
+ [ValueGlobal(IsXMonoid), ValueGlobal(IsXSemigroup)],
472
+ function(filter, S)
473
+ return IsomorphismMonoid(filter,
474
+ ThresholdTropicalMatrix(Representative(S)),
475
+ S);
476
+ end);
477
+
478
+ InstallMethod(IsomorphismMonoid,
479
+ Concatenation("for ", IsXMonoid, ", pos int, and a monoid"),
480
+ [ValueGlobal(IsXMonoid), IsPosInt, IsMonoid],
481
+ {filter, threshold, S} ->
482
+ IsomorphismSemigroup(ValueGlobal(IsXSemigroup), threshold, S));
483
+
484
+ InstallMethod(IsomorphismSemigroup,
485
+ Concatenation("for ", IsXSemigroup,
486
+ ", pos int, and a transformation semigroup with generators"),
487
+ [ValueGlobal(IsXSemigroup), IsPosInt,
488
+ IsTransformationSemigroup and HasGeneratorsOfSemigroup],
489
+ function(_, threshold, S)
490
+ local n, map, T;
491
+
492
+ n := Maximum(DegreeOfTransformationSemigroup(S), 1);
493
+ map := x -> AsMatrix(ValueGlobal(IsXMatrix), x, n, threshold);
494
+ T := Semigroup(List(GeneratorsOfSemigroup(S), map));
495
+ UseIsomorphismRelation(S, T);
496
+
497
+ return SemigroupIsomorphismByFunctionNC(S,
498
+ T,
499
+ map,
500
+ AsTransformation);
501
+ end);
502
+
503
+ InstallMethod(IsomorphismSemigroup,
504
+ Concatenation("for ", IsXSemigroup,
505
+ " and a transformation semigroup with generators"),
506
+ [ValueGlobal(IsXSemigroup),
507
+ IsTransformationSemigroup and HasGeneratorsOfSemigroup],
508
+ {filt, S} -> IsomorphismSemigroup(filt, 1, S));
509
+ end;
510
+
511
+ for _IsXMatrix in ["IsTropicalMaxPlusMatrix",
512
+ "IsTropicalMinPlusMatrix"] do
513
+ _InstallIsomorphism1(_IsXMatrix);
514
+ od;
515
+
516
+ Unbind(_IsXMatrix);
517
+ Unbind(_InstallIsomorphism1);
518
+
519
+ #############################################################################
520
+ ## Isomorphism from a transformation semigroup to a matrix semigroup
521
+ ## 2 additional parameters!!!
522
+ #############################################################################
523
+
524
+ InstallMethod(IsomorphismMonoid,
525
+ "for IsNTPMatrixMonoid, pos int, pos int, and a semigroup",
526
+ [IsNTPMatrixMonoid, IsPosInt, IsPosInt, IsSemigroup],
527
+ function(filter, threshold, period, S)
528
+ local iso1, inv1, iso2, inv2;
529
+
530
+ iso1 := IsomorphismTransformationMonoid(S);
531
+ inv1 := InverseGeneralMapping(iso1);
532
+ iso2 := IsomorphismMonoid(filter, threshold, period, Range(iso1));
533
+ inv2 := InverseGeneralMapping(iso2);
534
+
535
+ return SemigroupIsomorphismByFunctionNC(S,
536
+ Range(iso2),
537
+ x -> (x ^ iso1) ^ iso2,
538
+ x -> (x ^ inv2) ^ inv1);
539
+ end);
540
+
541
+ InstallMethod(IsomorphismMonoid,
542
+ "for IsNTPMatrixMonoid and a semigroup",
543
+ [IsNTPMatrixMonoid, IsSemigroup],
544
+ {filter, S} -> IsomorphismMonoid(filter, 1, 1, S));
545
+
546
+ InstallMethod(IsomorphismMonoid,
547
+ "for IsNTPMatrixMonoid and a ntp matrix semigroup",
548
+ [IsNTPMatrixMonoid, IsNTPMatrixSemigroup],
549
+ function(filter, S)
550
+ return IsomorphismMonoid(filter,
551
+ ThresholdNTPMatrix(Representative(S)),
552
+ PeriodNTPMatrix(Representative(S)),
553
+ S);
554
+ end);
555
+
556
+ InstallMethod(IsomorphismMonoid,
557
+ "for IsNTPMatrixMonoid, pos int, pos int, and a semigroup",
558
+ [IsNTPMatrixMonoid, IsPosInt, IsPosInt, IsMonoid],
559
+ {filter, threshold, period, S}
560
+ -> IsomorphismSemigroup(IsNTPMatrixSemigroup, threshold, period, S));
561
+
562
+ InstallMethod(IsomorphismSemigroup,
563
+ "for IsNTPMatrixSemigroup, pos int, pos int, trans semigroup with gens",
564
+ [IsNTPMatrixSemigroup, IsPosInt, IsPosInt,
565
+ IsTransformationSemigroup and HasGeneratorsOfSemigroup],
566
+ function(_, threshold, period, S)
567
+ local n, map, T;
568
+
569
+ n := Maximum(DegreeOfTransformationSemigroup(S), 1);
570
+ map := x -> AsMatrix(IsNTPMatrix, x, n, threshold, period);
571
+ T := Semigroup(List(GeneratorsOfSemigroup(S), map));
572
+ UseIsomorphismRelation(S, T);
573
+
574
+ return SemigroupIsomorphismByFunctionNC(S,
575
+ T,
576
+ x -> AsMatrix(IsNTPMatrix,
577
+ x,
578
+ n,
579
+ threshold,
580
+ period),
581
+ AsTransformation);
582
+ end);
583
+
584
+ #############################################################################
585
+ ## IsFinite and required methods for max-plus and min-plus matrix semigroups.
586
+ #############################################################################
587
+
588
+ ## Method from corollary 10, page 148, of:
589
+ ## I. Simon, Limited subsets of the free monoid,
590
+ ## Proc. of the 19th Annual Symposium on the Foundations of Computer Science,
591
+ ## IEEE, 1978, pp. 143-150.
592
+ ## https://tinyurl.com/h8er92u
593
+
594
+ InstallMethod(IsFinite,
595
+ "for a min-plus matrix semigroup",
596
+ [IsMinPlusMatrixSemigroup], SUM_FLAGS,
597
+ function(S)
598
+ local gens, id, mat, row, val;
599
+
600
+ if IsEnumerated(Enumerate(S, 8192)) then
601
+ return true;
602
+ fi;
603
+
604
+ gens := GeneratorsOfSemigroup(S);
605
+ for mat in gens do
606
+ for row in mat do
607
+ for val in row do
608
+ if val < 0 then
609
+ TryNextMethod();
610
+ fi;
611
+ od;
612
+ od;
613
+ od;
614
+ id := Idempotents(Semigroup(List(gens,
615
+ x -> AsMatrix(IsTropicalMinPlusMatrix,
616
+ x,
617
+ 1))));
618
+ for mat in id do
619
+ mat := AsMatrix(IsMinPlusMatrix, mat);
620
+ if mat ^ 2 <> mat ^ 3 then
621
+ return false;
622
+ fi;
623
+ od;
624
+ return true;
625
+ end);
626
+
627
+ ## The next two methods (IsFinite, IsTorsion for Max-plus) rely primarily on:
628
+ ## a)
629
+ ## Theorem 2.1 (positive solution to burnside problem) and
630
+ ## theorem 2.2 (decidability of torsion problem), page 2 et.al, from:
631
+ ## S. Gaubert, On the burnside problem for semigroups of matrices in the
632
+ ## (max, +) algebra, Semigroup Forum, Volume 52, pp 271-292, 1996.
633
+ ## https://tinyurl.com/znhk52m
634
+ ## b)
635
+ ## An unpublished result by J.D Mitchell & S. Burrell relating isomorphism of
636
+ ## normalized max-plus matrix semigroups to min-plus matrix semigroups.
637
+ ## (N.B.) b) is optional but preferable, for alternatives see a).
638
+
639
+ InstallMethod(IsFinite,
640
+ "for max-plus matrix semigroups",
641
+ [IsMaxPlusMatrixSemigroup], SUM_FLAGS,
642
+ function(S)
643
+ if IsEnumerated(Enumerate(S, 8192)) then
644
+ return true;
645
+ fi;
646
+ return IsTorsion(S);
647
+ end);
648
+
649
+ InstallMethod(IsTorsion,
650
+ "for a max-plus matrix semigroup",
651
+ [IsMaxPlusMatrixSemigroup],
652
+ function(S)
653
+ local gens, dim, func, m, rad, T;
654
+
655
+ gens := GeneratorsOfSemigroup(S);
656
+ dim := DimensionOfMatrixOverSemiring(Representative(gens));
657
+
658
+ func := function(i)
659
+ return List([1 .. dim],
660
+ j -> Maximum(List([1 .. Length(gens)], k -> gens[k][i][j])));
661
+ end;
662
+
663
+ m := Matrix(IsMaxPlusMatrix, List([1 .. dim], func));
664
+
665
+ # Case: SpectralRadius = - infinity
666
+ rad := SpectralRadius(m);
667
+ if rad = -infinity then
668
+ return true;
669
+ elif rad <> 0 then
670
+ return false;
671
+ fi;
672
+
673
+ # Case: SpectralRadius = 0
674
+ T := NormalizeSemigroup(S);
675
+ gens := List(GeneratorsOfSemigroup(T),
676
+ x -> Matrix(IsMinPlusMatrix, -AsList(x)));
677
+ return IsFinite(Semigroup(gens));
678
+ end);
679
+
680
+ ## A method based on the original solution by S. Gaubert (On the burnside
681
+ ## problem for semigroups of matrices in the (max, +) algebra), but
682
+ ## modified by S. Burrell (see thesis https://tinyurl.com/gr94xha).
683
+
684
+ InstallMethod(NormalizeSemigroup,
685
+ "for a finitely generated semigroup of max-plus matrices",
686
+ [IsMaxPlusMatrixSemigroup],
687
+ function(S)
688
+ local gens, dim, func, m, critcol, d, ngens, i;
689
+
690
+ gens := GeneratorsOfSemigroup(S);
691
+ dim := DimensionOfMatrixOverSemiring(Representative(gens));
692
+
693
+ func := function(i)
694
+ return List([1 .. dim],
695
+ j -> Maximum(List([1 .. Length(gens)], k -> gens[k][i][j])));
696
+ end;
697
+
698
+ # Sum with respect to max-plus algebra of generators of S.
699
+ m := Matrix(IsMaxPlusMatrix, List([1 .. dim], func));
700
+
701
+ critcol := RadialEigenvector(m);
702
+ d := List([1 .. dim], i -> List([1 .. dim], j -> -infinity));
703
+ for i in [1 .. dim] do
704
+ d[i][i] := critcol[i];
705
+ od;
706
+ d := Matrix(IsMaxPlusMatrix, d);
707
+
708
+ ngens := List(gens, g -> InverseOp(d) * g * d);
709
+ return Semigroup(ngens);
710
+ end);