passagemath-singular 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_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-singular might be problematic. Click here for more details.

Files changed (491) hide show
  1. PySingular.cpython-314-x86_64-linux-gnu.so +0 -0
  2. passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
  3. passagemath_singular-10.6.31rc3.dist-info/RECORD +491 -0
  4. passagemath_singular-10.6.31rc3.dist-info/WHEEL +6 -0
  5. passagemath_singular-10.6.31rc3.dist-info/top_level.txt +3 -0
  6. passagemath_singular.libs/libSingular-4-20aec911.4.1.so +0 -0
  7. passagemath_singular.libs/libcddgmp-21acf0c6.so.0.1.3 +0 -0
  8. passagemath_singular.libs/libfactory-4-fcee31da.4.1.so +0 -0
  9. passagemath_singular.libs/libflint-66e12231.so.21.0.0 +0 -0
  10. passagemath_singular.libs/libgf2x-a4cdec90.so.3.0.0 +0 -0
  11. passagemath_singular.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
  12. passagemath_singular.libs/libgmp-6e109695.so.10.5.0 +0 -0
  13. passagemath_singular.libs/libgsl-cda90e79.so.28.0.0 +0 -0
  14. passagemath_singular.libs/libmpfr-82690d50.so.6.2.1 +0 -0
  15. passagemath_singular.libs/libntl-e6f0d543.so.44.0.1 +0 -0
  16. passagemath_singular.libs/libomalloc-0-5c9e866e.9.6.so +0 -0
  17. passagemath_singular.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
  18. passagemath_singular.libs/libpolys-4-5c0a87e0.4.1.so +0 -0
  19. passagemath_singular.libs/libquadmath-2284e583.so.0.0.0 +0 -0
  20. passagemath_singular.libs/libreadline-ea270e21.so.8.2 +0 -0
  21. passagemath_singular.libs/libsingular_resources-4-a1aafc6d.4.1.so +0 -0
  22. passagemath_singular.libs/libtinfo-ceb117d9.so.6.3 +0 -0
  23. sage/algebras/all__sagemath_singular.py +3 -0
  24. sage/algebras/fusion_rings/all.py +19 -0
  25. sage/algebras/fusion_rings/f_matrix.py +2448 -0
  26. sage/algebras/fusion_rings/fast_parallel_fmats_methods.cpython-314-x86_64-linux-gnu.so +0 -0
  27. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd +5 -0
  28. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx +538 -0
  29. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.cpython-314-x86_64-linux-gnu.so +0 -0
  30. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd +3 -0
  31. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx +331 -0
  32. sage/algebras/fusion_rings/fusion_double.py +899 -0
  33. sage/algebras/fusion_rings/fusion_ring.py +1580 -0
  34. sage/algebras/fusion_rings/poly_tup_engine.cpython-314-x86_64-linux-gnu.so +0 -0
  35. sage/algebras/fusion_rings/poly_tup_engine.pxd +24 -0
  36. sage/algebras/fusion_rings/poly_tup_engine.pyx +579 -0
  37. sage/algebras/fusion_rings/shm_managers.cpython-314-x86_64-linux-gnu.so +0 -0
  38. sage/algebras/fusion_rings/shm_managers.pxd +24 -0
  39. sage/algebras/fusion_rings/shm_managers.pyx +780 -0
  40. sage/algebras/letterplace/all.py +1 -0
  41. sage/algebras/letterplace/free_algebra_element_letterplace.cpython-314-x86_64-linux-gnu.so +0 -0
  42. sage/algebras/letterplace/free_algebra_element_letterplace.pxd +18 -0
  43. sage/algebras/letterplace/free_algebra_element_letterplace.pyx +755 -0
  44. sage/algebras/letterplace/free_algebra_letterplace.cpython-314-x86_64-linux-gnu.so +0 -0
  45. sage/algebras/letterplace/free_algebra_letterplace.pxd +35 -0
  46. sage/algebras/letterplace/free_algebra_letterplace.pyx +914 -0
  47. sage/algebras/letterplace/letterplace_ideal.cpython-314-x86_64-linux-gnu.so +0 -0
  48. sage/algebras/letterplace/letterplace_ideal.pyx +408 -0
  49. sage/algebras/quatalg/all.py +2 -0
  50. sage/algebras/quatalg/quaternion_algebra.py +4778 -0
  51. sage/algebras/quatalg/quaternion_algebra_cython.cpython-314-x86_64-linux-gnu.so +0 -0
  52. sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
  53. sage/algebras/quatalg/quaternion_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
  54. sage/algebras/quatalg/quaternion_algebra_element.pxd +29 -0
  55. sage/algebras/quatalg/quaternion_algebra_element.pyx +2176 -0
  56. sage/all__sagemath_singular.py +11 -0
  57. sage/ext_data/all__sagemath_singular.py +1 -0
  58. sage/ext_data/singular/function_field/core.lib +98 -0
  59. sage/interfaces/all__sagemath_singular.py +1 -0
  60. sage/interfaces/singular.py +2835 -0
  61. sage/libs/all__sagemath_singular.py +1 -0
  62. sage/libs/singular/__init__.py +1 -0
  63. sage/libs/singular/decl.pxd +1168 -0
  64. sage/libs/singular/function.cpython-314-x86_64-linux-gnu.so +0 -0
  65. sage/libs/singular/function.pxd +87 -0
  66. sage/libs/singular/function.pyx +1901 -0
  67. sage/libs/singular/function_factory.py +61 -0
  68. sage/libs/singular/groebner_strategy.cpython-314-x86_64-linux-gnu.so +0 -0
  69. sage/libs/singular/groebner_strategy.pxd +22 -0
  70. sage/libs/singular/groebner_strategy.pyx +582 -0
  71. sage/libs/singular/option.cpython-314-x86_64-linux-gnu.so +0 -0
  72. sage/libs/singular/option.pyx +671 -0
  73. sage/libs/singular/polynomial.cpython-314-x86_64-linux-gnu.so +0 -0
  74. sage/libs/singular/polynomial.pxd +39 -0
  75. sage/libs/singular/polynomial.pyx +661 -0
  76. sage/libs/singular/ring.cpython-314-x86_64-linux-gnu.so +0 -0
  77. sage/libs/singular/ring.pxd +58 -0
  78. sage/libs/singular/ring.pyx +893 -0
  79. sage/libs/singular/singular.cpython-314-x86_64-linux-gnu.so +0 -0
  80. sage/libs/singular/singular.pxd +72 -0
  81. sage/libs/singular/singular.pyx +1944 -0
  82. sage/libs/singular/standard_options.py +145 -0
  83. sage/matrix/all__sagemath_singular.py +1 -0
  84. sage/matrix/matrix_mpolynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  85. sage/matrix/matrix_mpolynomial_dense.pxd +7 -0
  86. sage/matrix/matrix_mpolynomial_dense.pyx +615 -0
  87. sage/rings/all__sagemath_singular.py +1 -0
  88. sage/rings/function_field/all__sagemath_singular.py +1 -0
  89. sage/rings/function_field/derivations_polymod.py +911 -0
  90. sage/rings/function_field/element_polymod.cpython-314-x86_64-linux-gnu.so +0 -0
  91. sage/rings/function_field/element_polymod.pyx +406 -0
  92. sage/rings/function_field/function_field_polymod.py +2611 -0
  93. sage/rings/function_field/ideal_polymod.py +1775 -0
  94. sage/rings/function_field/order_polymod.py +1475 -0
  95. sage/rings/function_field/place_polymod.py +681 -0
  96. sage/rings/polynomial/all__sagemath_singular.py +1 -0
  97. sage/rings/polynomial/multi_polynomial_ideal_libsingular.cpython-314-x86_64-linux-gnu.so +0 -0
  98. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd +5 -0
  99. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx +339 -0
  100. sage/rings/polynomial/multi_polynomial_libsingular.cpython-314-x86_64-linux-gnu.so +0 -0
  101. sage/rings/polynomial/multi_polynomial_libsingular.pxd +30 -0
  102. sage/rings/polynomial/multi_polynomial_libsingular.pyx +6277 -0
  103. sage/rings/polynomial/plural.cpython-314-x86_64-linux-gnu.so +0 -0
  104. sage/rings/polynomial/plural.pxd +48 -0
  105. sage/rings/polynomial/plural.pyx +3171 -0
  106. sage/symbolic/all__sagemath_singular.py +1 -0
  107. sage/symbolic/comparison_impl.pxi +428 -0
  108. sage/symbolic/constants_c_impl.pxi +178 -0
  109. sage/symbolic/expression.cpython-314-x86_64-linux-gnu.so +0 -0
  110. sage/symbolic/expression.pxd +7 -0
  111. sage/symbolic/expression.pyx +14200 -0
  112. sage/symbolic/getitem_impl.pxi +202 -0
  113. sage/symbolic/pynac.pxi +572 -0
  114. sage/symbolic/pynac_constant_impl.pxi +133 -0
  115. sage/symbolic/pynac_function_impl.pxi +206 -0
  116. sage/symbolic/pynac_impl.pxi +2576 -0
  117. sage/symbolic/pynac_wrap.h +124 -0
  118. sage/symbolic/series_impl.pxi +272 -0
  119. sage/symbolic/substitution_map_impl.pxi +94 -0
  120. sage_wheels/bin/ESingular +0 -0
  121. sage_wheels/bin/Singular +0 -0
  122. sage_wheels/bin/TSingular +0 -0
  123. sage_wheels/lib/singular/MOD/cohomo.la +41 -0
  124. sage_wheels/lib/singular/MOD/cohomo.so +0 -0
  125. sage_wheels/lib/singular/MOD/customstd.la +41 -0
  126. sage_wheels/lib/singular/MOD/customstd.so +0 -0
  127. sage_wheels/lib/singular/MOD/freealgebra.la +41 -0
  128. sage_wheels/lib/singular/MOD/freealgebra.so +0 -0
  129. sage_wheels/lib/singular/MOD/gfanlib.la +41 -0
  130. sage_wheels/lib/singular/MOD/gfanlib.so +0 -0
  131. sage_wheels/lib/singular/MOD/gitfan.la +41 -0
  132. sage_wheels/lib/singular/MOD/gitfan.so +0 -0
  133. sage_wheels/lib/singular/MOD/interval.la +41 -0
  134. sage_wheels/lib/singular/MOD/interval.so +0 -0
  135. sage_wheels/lib/singular/MOD/loctriv.la +41 -0
  136. sage_wheels/lib/singular/MOD/loctriv.so +0 -0
  137. sage_wheels/lib/singular/MOD/machinelearning.la +41 -0
  138. sage_wheels/lib/singular/MOD/machinelearning.so +0 -0
  139. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.la +41 -0
  140. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.so +0 -0
  141. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.la +41 -0
  142. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.so +0 -0
  143. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.la +41 -0
  144. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.so +0 -0
  145. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.la +41 -0
  146. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.so +0 -0
  147. sage_wheels/lib/singular/MOD/partialgb.la +41 -0
  148. sage_wheels/lib/singular/MOD/partialgb.so +0 -0
  149. sage_wheels/lib/singular/MOD/pyobject.la +41 -0
  150. sage_wheels/lib/singular/MOD/pyobject.so +0 -0
  151. sage_wheels/lib/singular/MOD/singmathic.la +41 -0
  152. sage_wheels/lib/singular/MOD/singmathic.so +0 -0
  153. sage_wheels/lib/singular/MOD/sispasm.la +41 -0
  154. sage_wheels/lib/singular/MOD/sispasm.so +0 -0
  155. sage_wheels/lib/singular/MOD/subsets.la +41 -0
  156. sage_wheels/lib/singular/MOD/subsets.so +0 -0
  157. sage_wheels/lib/singular/MOD/systhreads.la +41 -0
  158. sage_wheels/lib/singular/MOD/systhreads.so +0 -0
  159. sage_wheels/lib/singular/MOD/syzextra.la +41 -0
  160. sage_wheels/lib/singular/MOD/syzextra.so +0 -0
  161. sage_wheels/libexec/singular/MOD/change_cost +0 -0
  162. sage_wheels/libexec/singular/MOD/singularsurf +11 -0
  163. sage_wheels/libexec/singular/MOD/singularsurf_jupyter +9 -0
  164. sage_wheels/libexec/singular/MOD/singularsurf_win +10 -0
  165. sage_wheels/libexec/singular/MOD/solve_IP +0 -0
  166. sage_wheels/libexec/singular/MOD/surfex +16 -0
  167. sage_wheels/libexec/singular/MOD/toric_ideal +0 -0
  168. sage_wheels/share/factory/gftables/10201 +342 -0
  169. sage_wheels/share/factory/gftables/1024 +37 -0
  170. sage_wheels/share/factory/gftables/10609 +356 -0
  171. sage_wheels/share/factory/gftables/11449 +384 -0
  172. sage_wheels/share/factory/gftables/11881 +398 -0
  173. sage_wheels/share/factory/gftables/121 +6 -0
  174. sage_wheels/share/factory/gftables/12167 +408 -0
  175. sage_wheels/share/factory/gftables/125 +7 -0
  176. sage_wheels/share/factory/gftables/12769 +428 -0
  177. sage_wheels/share/factory/gftables/128 +7 -0
  178. sage_wheels/share/factory/gftables/1331 +47 -0
  179. sage_wheels/share/factory/gftables/1369 +48 -0
  180. sage_wheels/share/factory/gftables/14641 +490 -0
  181. sage_wheels/share/factory/gftables/15625 +523 -0
  182. sage_wheels/share/factory/gftables/16 +3 -0
  183. sage_wheels/share/factory/gftables/16129 +540 -0
  184. sage_wheels/share/factory/gftables/16384 +549 -0
  185. sage_wheels/share/factory/gftables/16807 +563 -0
  186. sage_wheels/share/factory/gftables/1681 +58 -0
  187. sage_wheels/share/factory/gftables/169 +8 -0
  188. sage_wheels/share/factory/gftables/17161 +574 -0
  189. sage_wheels/share/factory/gftables/1849 +64 -0
  190. sage_wheels/share/factory/gftables/18769 +628 -0
  191. sage_wheels/share/factory/gftables/19321 +646 -0
  192. sage_wheels/share/factory/gftables/19683 +659 -0
  193. sage_wheels/share/factory/gftables/2048 +71 -0
  194. sage_wheels/share/factory/gftables/2187 +75 -0
  195. sage_wheels/share/factory/gftables/2197 +76 -0
  196. sage_wheels/share/factory/gftables/2209 +76 -0
  197. sage_wheels/share/factory/gftables/22201 +742 -0
  198. sage_wheels/share/factory/gftables/22801 +762 -0
  199. sage_wheels/share/factory/gftables/2401 +82 -0
  200. sage_wheels/share/factory/gftables/243 +11 -0
  201. sage_wheels/share/factory/gftables/24389 +815 -0
  202. sage_wheels/share/factory/gftables/24649 +824 -0
  203. sage_wheels/share/factory/gftables/25 +3 -0
  204. sage_wheels/share/factory/gftables/256 +11 -0
  205. sage_wheels/share/factory/gftables/26569 +888 -0
  206. sage_wheels/share/factory/gftables/27 +3 -0
  207. sage_wheels/share/factory/gftables/27889 +932 -0
  208. sage_wheels/share/factory/gftables/2809 +96 -0
  209. sage_wheels/share/factory/gftables/28561 +954 -0
  210. sage_wheels/share/factory/gftables/289 +12 -0
  211. sage_wheels/share/factory/gftables/29791 +995 -0
  212. sage_wheels/share/factory/gftables/29929 +1000 -0
  213. sage_wheels/share/factory/gftables/3125 +107 -0
  214. sage_wheels/share/factory/gftables/32 +4 -0
  215. sage_wheels/share/factory/gftables/32041 +1070 -0
  216. sage_wheels/share/factory/gftables/32761 +1094 -0
  217. sage_wheels/share/factory/gftables/32768 +1095 -0
  218. sage_wheels/share/factory/gftables/343 +14 -0
  219. sage_wheels/share/factory/gftables/3481 +118 -0
  220. sage_wheels/share/factory/gftables/361 +14 -0
  221. sage_wheels/share/factory/gftables/36481 +1218 -0
  222. sage_wheels/share/factory/gftables/3721 +126 -0
  223. sage_wheels/share/factory/gftables/37249 +1244 -0
  224. sage_wheels/share/factory/gftables/38809 +1296 -0
  225. sage_wheels/share/factory/gftables/39601 +1322 -0
  226. sage_wheels/share/factory/gftables/4 +3 -0
  227. sage_wheels/share/factory/gftables/4096 +139 -0
  228. sage_wheels/share/factory/gftables/44521 +1486 -0
  229. sage_wheels/share/factory/gftables/4489 +152 -0
  230. sage_wheels/share/factory/gftables/49 +4 -0
  231. sage_wheels/share/factory/gftables/4913 +166 -0
  232. sage_wheels/share/factory/gftables/49729 +1660 -0
  233. sage_wheels/share/factory/gftables/5041 +170 -0
  234. sage_wheels/share/factory/gftables/50653 +1691 -0
  235. sage_wheels/share/factory/gftables/512 +20 -0
  236. sage_wheels/share/factory/gftables/51529 +1720 -0
  237. sage_wheels/share/factory/gftables/52441 +1750 -0
  238. sage_wheels/share/factory/gftables/529 +20 -0
  239. sage_wheels/share/factory/gftables/5329 +180 -0
  240. sage_wheels/share/factory/gftables/54289 +1812 -0
  241. sage_wheels/share/factory/gftables/57121 +1906 -0
  242. sage_wheels/share/factory/gftables/58081 +1938 -0
  243. sage_wheels/share/factory/gftables/59049 +1971 -0
  244. sage_wheels/share/factory/gftables/6241 +210 -0
  245. sage_wheels/share/factory/gftables/625 +23 -0
  246. sage_wheels/share/factory/gftables/63001 +2102 -0
  247. sage_wheels/share/factory/gftables/64 +5 -0
  248. sage_wheels/share/factory/gftables/6561 +221 -0
  249. sage_wheels/share/factory/gftables/6859 +231 -0
  250. sage_wheels/share/factory/gftables/6889 +232 -0
  251. sage_wheels/share/factory/gftables/729 +27 -0
  252. sage_wheels/share/factory/gftables/7921 +266 -0
  253. sage_wheels/share/factory/gftables/8 +3 -0
  254. sage_wheels/share/factory/gftables/81 +5 -0
  255. sage_wheels/share/factory/gftables/8192 +276 -0
  256. sage_wheels/share/factory/gftables/841 +30 -0
  257. sage_wheels/share/factory/gftables/9 +3 -0
  258. sage_wheels/share/factory/gftables/9409 +316 -0
  259. sage_wheels/share/factory/gftables/961 +34 -0
  260. sage_wheels/share/info/singular.info +191898 -0
  261. sage_wheels/share/singular/LIB/GND.lib +1359 -0
  262. sage_wheels/share/singular/LIB/JMBTest.lib +976 -0
  263. sage_wheels/share/singular/LIB/JMSConst.lib +1363 -0
  264. sage_wheels/share/singular/LIB/KVequiv.lib +699 -0
  265. sage_wheels/share/singular/LIB/SingularityDBM.lib +491 -0
  266. sage_wheels/share/singular/LIB/VecField.lib +1542 -0
  267. sage_wheels/share/singular/LIB/absfact.lib +959 -0
  268. sage_wheels/share/singular/LIB/ainvar.lib +730 -0
  269. sage_wheels/share/singular/LIB/aksaka.lib +419 -0
  270. sage_wheels/share/singular/LIB/alexpoly.lib +2542 -0
  271. sage_wheels/share/singular/LIB/algebra.lib +1193 -0
  272. sage_wheels/share/singular/LIB/all.lib +136 -0
  273. sage_wheels/share/singular/LIB/arcpoint.lib +514 -0
  274. sage_wheels/share/singular/LIB/arnold.lib +4553 -0
  275. sage_wheels/share/singular/LIB/arnoldclassify.lib +2058 -0
  276. sage_wheels/share/singular/LIB/arr.lib +3486 -0
  277. sage_wheels/share/singular/LIB/assprimeszerodim.lib +755 -0
  278. sage_wheels/share/singular/LIB/autgradalg.lib +3361 -0
  279. sage_wheels/share/singular/LIB/bfun.lib +1964 -0
  280. sage_wheels/share/singular/LIB/bimodules.lib +774 -0
  281. sage_wheels/share/singular/LIB/brillnoether.lib +226 -0
  282. sage_wheels/share/singular/LIB/brnoeth.lib +5017 -0
  283. sage_wheels/share/singular/LIB/central.lib +2169 -0
  284. sage_wheels/share/singular/LIB/chern.lib +4162 -0
  285. sage_wheels/share/singular/LIB/cimonom.lib +571 -0
  286. sage_wheels/share/singular/LIB/cisimplicial.lib +1835 -0
  287. sage_wheels/share/singular/LIB/classify.lib +3239 -0
  288. sage_wheels/share/singular/LIB/classify2.lib +1462 -0
  289. sage_wheels/share/singular/LIB/classifyMapGerms.lib +1515 -0
  290. sage_wheels/share/singular/LIB/classify_aeq.lib +3253 -0
  291. sage_wheels/share/singular/LIB/classifyceq.lib +2092 -0
  292. sage_wheels/share/singular/LIB/classifyci.lib +1133 -0
  293. sage_wheels/share/singular/LIB/combinat.lib +91 -0
  294. sage_wheels/share/singular/LIB/compregb.lib +276 -0
  295. sage_wheels/share/singular/LIB/control.lib +1636 -0
  296. sage_wheels/share/singular/LIB/crypto.lib +3795 -0
  297. sage_wheels/share/singular/LIB/curveInv.lib +667 -0
  298. sage_wheels/share/singular/LIB/curvepar.lib +1817 -0
  299. sage_wheels/share/singular/LIB/customstd.lib +100 -0
  300. sage_wheels/share/singular/LIB/deRham.lib +5979 -0
  301. sage_wheels/share/singular/LIB/decodegb.lib +2134 -0
  302. sage_wheels/share/singular/LIB/decomp.lib +1655 -0
  303. sage_wheels/share/singular/LIB/deflation.lib +872 -0
  304. sage_wheels/share/singular/LIB/deform.lib +925 -0
  305. sage_wheels/share/singular/LIB/difform.lib +3055 -0
  306. sage_wheels/share/singular/LIB/divisors.lib +750 -0
  307. sage_wheels/share/singular/LIB/dmod.lib +5817 -0
  308. sage_wheels/share/singular/LIB/dmodapp.lib +3269 -0
  309. sage_wheels/share/singular/LIB/dmodideal.lib +1211 -0
  310. sage_wheels/share/singular/LIB/dmodloc.lib +2645 -0
  311. sage_wheels/share/singular/LIB/dmodvar.lib +818 -0
  312. sage_wheels/share/singular/LIB/dummy.lib +17 -0
  313. sage_wheels/share/singular/LIB/elim.lib +1009 -0
  314. sage_wheels/share/singular/LIB/ellipticcovers.lib +548 -0
  315. sage_wheels/share/singular/LIB/enumpoints.lib +146 -0
  316. sage_wheels/share/singular/LIB/equising.lib +2127 -0
  317. sage_wheels/share/singular/LIB/ffmodstd.lib +2384 -0
  318. sage_wheels/share/singular/LIB/ffsolve.lib +1289 -0
  319. sage_wheels/share/singular/LIB/findifs.lib +778 -0
  320. sage_wheels/share/singular/LIB/finitediff.lib +1768 -0
  321. sage_wheels/share/singular/LIB/finvar.lib +7989 -0
  322. sage_wheels/share/singular/LIB/fpadim.lib +2429 -0
  323. sage_wheels/share/singular/LIB/fpalgebras.lib +1666 -0
  324. sage_wheels/share/singular/LIB/fpaprops.lib +1462 -0
  325. sage_wheels/share/singular/LIB/freegb.lib +3853 -0
  326. sage_wheels/share/singular/LIB/general.lib +1350 -0
  327. sage_wheels/share/singular/LIB/gfan.lib +1768 -0
  328. sage_wheels/share/singular/LIB/gitfan.lib +3130 -0
  329. sage_wheels/share/singular/LIB/gkdim.lib +99 -0
  330. sage_wheels/share/singular/LIB/gmspoly.lib +589 -0
  331. sage_wheels/share/singular/LIB/gmssing.lib +1739 -0
  332. sage_wheels/share/singular/LIB/goettsche.lib +909 -0
  333. sage_wheels/share/singular/LIB/graal.lib +1366 -0
  334. sage_wheels/share/singular/LIB/gradedModules.lib +2541 -0
  335. sage_wheels/share/singular/LIB/graphics.lib +360 -0
  336. sage_wheels/share/singular/LIB/grobcov.lib +7706 -0
  337. sage_wheels/share/singular/LIB/groups.lib +1123 -0
  338. sage_wheels/share/singular/LIB/grwalk.lib +507 -0
  339. sage_wheels/share/singular/LIB/hdepth.lib +194 -0
  340. sage_wheels/share/singular/LIB/help.cnf +57 -0
  341. sage_wheels/share/singular/LIB/hess.lib +1946 -0
  342. sage_wheels/share/singular/LIB/hnoether.lib +4292 -0
  343. sage_wheels/share/singular/LIB/hodge.lib +400 -0
  344. sage_wheels/share/singular/LIB/homolog.lib +1965 -0
  345. sage_wheels/share/singular/LIB/hyperel.lib +975 -0
  346. sage_wheels/share/singular/LIB/inout.lib +679 -0
  347. sage_wheels/share/singular/LIB/integralbasis.lib +6224 -0
  348. sage_wheels/share/singular/LIB/interval.lib +1418 -0
  349. sage_wheels/share/singular/LIB/intprog.lib +778 -0
  350. sage_wheels/share/singular/LIB/invar.lib +443 -0
  351. sage_wheels/share/singular/LIB/involut.lib +980 -0
  352. sage_wheels/share/singular/LIB/jacobson.lib +1215 -0
  353. sage_wheels/share/singular/LIB/kskernel.lib +534 -0
  354. sage_wheels/share/singular/LIB/latex.lib +3146 -0
  355. sage_wheels/share/singular/LIB/lejeune.lib +651 -0
  356. sage_wheels/share/singular/LIB/linalg.lib +2040 -0
  357. sage_wheels/share/singular/LIB/locnormal.lib +212 -0
  358. sage_wheels/share/singular/LIB/lrcalc.lib +526 -0
  359. sage_wheels/share/singular/LIB/makedbm.lib +294 -0
  360. sage_wheels/share/singular/LIB/mathml.lib +813 -0
  361. sage_wheels/share/singular/LIB/matrix.lib +1372 -0
  362. sage_wheels/share/singular/LIB/maxlike.lib +1132 -0
  363. sage_wheels/share/singular/LIB/methods.lib +212 -0
  364. sage_wheels/share/singular/LIB/moddiq.lib +322 -0
  365. sage_wheels/share/singular/LIB/modfinduni.lib +181 -0
  366. sage_wheels/share/singular/LIB/modnormal.lib +218 -0
  367. sage_wheels/share/singular/LIB/modprimdec.lib +1278 -0
  368. sage_wheels/share/singular/LIB/modquotient.lib +269 -0
  369. sage_wheels/share/singular/LIB/modstd.lib +1024 -0
  370. sage_wheels/share/singular/LIB/modular.lib +545 -0
  371. sage_wheels/share/singular/LIB/modules.lib +2561 -0
  372. sage_wheels/share/singular/LIB/modwalk.lib +609 -0
  373. sage_wheels/share/singular/LIB/mondromy.lib +1016 -0
  374. sage_wheels/share/singular/LIB/monomialideal.lib +3851 -0
  375. sage_wheels/share/singular/LIB/mprimdec.lib +2353 -0
  376. sage_wheels/share/singular/LIB/mregular.lib +1863 -0
  377. sage_wheels/share/singular/LIB/multigrading.lib +5629 -0
  378. sage_wheels/share/singular/LIB/ncHilb.lib +777 -0
  379. sage_wheels/share/singular/LIB/ncModslimgb.lib +791 -0
  380. sage_wheels/share/singular/LIB/ncalg.lib +16311 -0
  381. sage_wheels/share/singular/LIB/ncall.lib +31 -0
  382. sage_wheels/share/singular/LIB/ncdecomp.lib +468 -0
  383. sage_wheels/share/singular/LIB/ncfactor.lib +13371 -0
  384. sage_wheels/share/singular/LIB/ncfrac.lib +1023 -0
  385. sage_wheels/share/singular/LIB/nchilbert.lib +448 -0
  386. sage_wheels/share/singular/LIB/nchomolog.lib +759 -0
  387. sage_wheels/share/singular/LIB/ncloc.lib +361 -0
  388. sage_wheels/share/singular/LIB/ncpreim.lib +795 -0
  389. sage_wheels/share/singular/LIB/ncrat.lib +2849 -0
  390. sage_wheels/share/singular/LIB/nctools.lib +1887 -0
  391. sage_wheels/share/singular/LIB/nets.lib +1456 -0
  392. sage_wheels/share/singular/LIB/nfmodstd.lib +1000 -0
  393. sage_wheels/share/singular/LIB/nfmodsyz.lib +732 -0
  394. sage_wheels/share/singular/LIB/noether.lib +1106 -0
  395. sage_wheels/share/singular/LIB/normal.lib +8700 -0
  396. sage_wheels/share/singular/LIB/normaliz.lib +2226 -0
  397. sage_wheels/share/singular/LIB/ntsolve.lib +362 -0
  398. sage_wheels/share/singular/LIB/numerAlg.lib +560 -0
  399. sage_wheels/share/singular/LIB/numerDecom.lib +2261 -0
  400. sage_wheels/share/singular/LIB/olga.lib +1933 -0
  401. sage_wheels/share/singular/LIB/orbitparam.lib +351 -0
  402. sage_wheels/share/singular/LIB/parallel.lib +319 -0
  403. sage_wheels/share/singular/LIB/paraplanecurves.lib +3110 -0
  404. sage_wheels/share/singular/LIB/perron.lib +202 -0
  405. sage_wheels/share/singular/LIB/pfd.lib +2223 -0
  406. sage_wheels/share/singular/LIB/phindex.lib +642 -0
  407. sage_wheels/share/singular/LIB/pointid.lib +673 -0
  408. sage_wheels/share/singular/LIB/polybori.lib +1430 -0
  409. sage_wheels/share/singular/LIB/polyclass.lib +525 -0
  410. sage_wheels/share/singular/LIB/polylib.lib +1174 -0
  411. sage_wheels/share/singular/LIB/polymake.lib +1902 -0
  412. sage_wheels/share/singular/LIB/presolve.lib +1533 -0
  413. sage_wheels/share/singular/LIB/primdec.lib +9576 -0
  414. sage_wheels/share/singular/LIB/primdecint.lib +1782 -0
  415. sage_wheels/share/singular/LIB/primitiv.lib +401 -0
  416. sage_wheels/share/singular/LIB/puiseuxexpansions.lib +1631 -0
  417. sage_wheels/share/singular/LIB/purityfiltration.lib +960 -0
  418. sage_wheels/share/singular/LIB/qhmoduli.lib +1561 -0
  419. sage_wheels/share/singular/LIB/qmatrix.lib +293 -0
  420. sage_wheels/share/singular/LIB/random.lib +455 -0
  421. sage_wheels/share/singular/LIB/ratgb.lib +489 -0
  422. sage_wheels/share/singular/LIB/realclassify.lib +5759 -0
  423. sage_wheels/share/singular/LIB/realizationMatroids.lib +772 -0
  424. sage_wheels/share/singular/LIB/realrad.lib +1197 -0
  425. sage_wheels/share/singular/LIB/recover.lib +2628 -0
  426. sage_wheels/share/singular/LIB/redcgs.lib +3984 -0
  427. sage_wheels/share/singular/LIB/reesclos.lib +465 -0
  428. sage_wheels/share/singular/LIB/resbinomial.lib +2802 -0
  429. sage_wheels/share/singular/LIB/resgraph.lib +789 -0
  430. sage_wheels/share/singular/LIB/resjung.lib +820 -0
  431. sage_wheels/share/singular/LIB/resolve.lib +5110 -0
  432. sage_wheels/share/singular/LIB/resources.lib +170 -0
  433. sage_wheels/share/singular/LIB/reszeta.lib +5473 -0
  434. sage_wheels/share/singular/LIB/ring.lib +1328 -0
  435. sage_wheels/share/singular/LIB/ringgb.lib +343 -0
  436. sage_wheels/share/singular/LIB/rinvar.lib +1153 -0
  437. sage_wheels/share/singular/LIB/rootisolation.lib +1481 -0
  438. sage_wheels/share/singular/LIB/rootsmr.lib +709 -0
  439. sage_wheels/share/singular/LIB/rootsur.lib +886 -0
  440. sage_wheels/share/singular/LIB/rstandard.lib +607 -0
  441. sage_wheels/share/singular/LIB/rwalk.lib +336 -0
  442. sage_wheels/share/singular/LIB/sagbi.lib +1353 -0
  443. sage_wheels/share/singular/LIB/sagbiNormaliz.lib +1622 -0
  444. sage_wheels/share/singular/LIB/sagbiNormaliz0.lib +1498 -0
  445. sage_wheels/share/singular/LIB/sagbigrob.lib +449 -0
  446. sage_wheels/share/singular/LIB/schreyer.lib +321 -0
  447. sage_wheels/share/singular/LIB/schubert.lib +2551 -0
  448. sage_wheels/share/singular/LIB/sets.lib +524 -0
  449. sage_wheels/share/singular/LIB/sheafcoh.lib +1663 -0
  450. sage_wheels/share/singular/LIB/signcond.lib +437 -0
  451. sage_wheels/share/singular/LIB/sing.lib +1094 -0
  452. sage_wheels/share/singular/LIB/sing4ti2.lib +419 -0
  453. sage_wheels/share/singular/LIB/solve.lib +2243 -0
  454. sage_wheels/share/singular/LIB/spcurve.lib +1077 -0
  455. sage_wheels/share/singular/LIB/spectrum.lib +62 -0
  456. sage_wheels/share/singular/LIB/sresext.lib +757 -0
  457. sage_wheels/share/singular/LIB/ssi.lib +143 -0
  458. sage_wheels/share/singular/LIB/standard.lib +2769 -0
  459. sage_wheels/share/singular/LIB/stanleyreisner.lib +473 -0
  460. sage_wheels/share/singular/LIB/stdmodule.lib +547 -0
  461. sage_wheels/share/singular/LIB/stratify.lib +1070 -0
  462. sage_wheels/share/singular/LIB/surf.lib +506 -0
  463. sage_wheels/share/singular/LIB/surf_jupyter.lib +223 -0
  464. sage_wheels/share/singular/LIB/surfacesignature.lib +522 -0
  465. sage_wheels/share/singular/LIB/surfex.lib +1462 -0
  466. sage_wheels/share/singular/LIB/swalk.lib +877 -0
  467. sage_wheels/share/singular/LIB/symodstd.lib +1570 -0
  468. sage_wheels/share/singular/LIB/systhreads.lib +74 -0
  469. sage_wheels/share/singular/LIB/tasks.lib +1324 -0
  470. sage_wheels/share/singular/LIB/tateProdCplxNegGrad.lib +2412 -0
  471. sage_wheels/share/singular/LIB/teachstd.lib +858 -0
  472. sage_wheels/share/singular/LIB/template.lib +116 -0
  473. sage_wheels/share/singular/LIB/toric.lib +1119 -0
  474. sage_wheels/share/singular/LIB/transformation.lib +116 -0
  475. sage_wheels/share/singular/LIB/triang.lib +1197 -0
  476. sage_wheels/share/singular/LIB/tropical.lib +8741 -0
  477. sage_wheels/share/singular/LIB/tropicalEllipticCovers.lib +2922 -0
  478. sage_wheels/share/singular/LIB/tropicalNewton.lib +1128 -0
  479. sage_wheels/share/singular/LIB/tst.lib +1108 -0
  480. sage_wheels/share/singular/LIB/weierstr.lib +241 -0
  481. sage_wheels/share/singular/LIB/zeroset.lib +1478 -0
  482. sage_wheels/share/singular/emacs/.emacs-general +184 -0
  483. sage_wheels/share/singular/emacs/.emacs-singular +234 -0
  484. sage_wheels/share/singular/emacs/COPYING +44 -0
  485. sage_wheels/share/singular/emacs/cmd-cmpl.el +241 -0
  486. sage_wheels/share/singular/emacs/ex-cmpl.el +1681 -0
  487. sage_wheels/share/singular/emacs/hlp-cmpl.el +4318 -0
  488. sage_wheels/share/singular/emacs/lib-cmpl.el +179 -0
  489. sage_wheels/share/singular/emacs/singular.el +4273 -0
  490. sage_wheels/share/singular/emacs/singular.xpm +39 -0
  491. sage_wheels/share/singular/singular.idx +5002 -0
@@ -0,0 +1,1153 @@
1
+ /////////////////////////////////////////////////////////////////////////////
2
+ version="version rinvar.lib 4.4.0.6 Oct_2024 "; // $Id: 382f59a0973c5982c9f40403ed14121b43564de7 $
3
+ category="Invariant theory";
4
+ info="
5
+ LIBRARY: rinvar.lib Invariant Rings of Reductive Groups
6
+ AUTHOR: Thomas Bayer, tbayer@in.tum.de
7
+ http://wwwmayr.informatik.tu-muenchen.de/personen/bayert/
8
+ Current Address: Institut fuer Informatik, TU Muenchen
9
+ OVERVIEW:
10
+ Implementation based on Derksen's algorithm. Written in the scope of the
11
+ diploma thesis (advisor: Prof. Gert-Martin Greuel) 'Computations of moduli
12
+ spaces of semiquasihomogenous singularities and an implementation in Singular'
13
+
14
+ PROCEDURES:
15
+ HilbertSeries(I, w); Hilbert series of the ideal I w.r.t. weight w
16
+ HilbertWeights(I, w); weighted degrees of the generators of I
17
+ ImageVariety(I, F); ideal of the image variety F(variety(I))
18
+ ImageGroup(G, F); ideal of G w.r.t. the induced representation
19
+ InvariantRing(G, Gaction); generators of the invariant ring of G
20
+ InvariantQ(f, G, Gaction); decide if f is invariant w.r.t. G
21
+ LinearizeAction(G, Gaction); linearization of the action 'Gaction' of G
22
+ LinearActionQ(action,s,t); decide if action is linear in var(s..nvars)
23
+ LinearCombinationQ(base, f); decide if f is in the linear hull of 'base'
24
+ MinimalDecomposition(f,s,t); minimal decomposition of f (like coef)
25
+ NullCone(G, act); ideal of the nullcone of the action 'act' of G
26
+ ReynoldsImage(RO,f); image of f under the Reynolds operator 'RO'
27
+ ReynoldsOperator(G, Gaction); Reynolds operator of the group G
28
+ SimplifyIdeal(I[,m,s]); simplify the ideal I (try to reduce variables)
29
+
30
+ SEE ALSO: qhmoduli_lib, zeroset_lib
31
+ ";
32
+
33
+ LIB "presolve.lib";
34
+ LIB "elim.lib";
35
+ LIB "zeroset.lib";
36
+ LIB "ring.lib";
37
+
38
+ ///////////////////////////////////////////////////////////////////////////////
39
+
40
+ proc EquationsOfEmbedding(ideal embedding, int nrs)
41
+ "USAGE: EquationsOfEmbedding(embedding, s); ideal embedding; int s;
42
+ PURPOSE: compute the ideal of the variety parameterized by 'embedding' by
43
+ implicitation and change the variables to the old ones.
44
+ RETURN: ideal
45
+ ASSUME: nvars(basering) = n, size(embedding) = r and s = n - r.
46
+ The polynomials of embedding contain only var(s + 1 .. n).
47
+ NOTE: the result is the Zariski closure of the parameterized variety
48
+ EXAMPLE: example EquationsOfEmbedding; shows an example
49
+ "
50
+ {
51
+ ideal tvars;
52
+
53
+ for(int i = nrs + 1; i <= nvars(basering); i++) { tvars[i - nrs] = var(i); }
54
+
55
+ def RE1 = ImageVariety(ideal(0), embedding); // implicitation of the parameterization
56
+ // map F = RE1, tvars;
57
+ map F = RE1, maxideal(1);
58
+ return(F(imageid));
59
+ }
60
+ example
61
+ {"EXAMPLE:"; echo = 2;
62
+ ring R = 0,(s(1..5), t(1..4)),dp;
63
+ ideal emb = t(1), t(2), t(3), t(3)^2;
64
+ ideal I = EquationsOfEmbedding(emb, 5);
65
+ I;
66
+ }
67
+
68
+ ///////////////////////////////////////////////////////////////////////////////
69
+
70
+ proc ImageGroup(ideal Grp, ideal Gaction)
71
+ "USAGE: ImageGroup(G, action); ideal G, action;
72
+ PURPOSE: compute the ideal of the image of G in GL(m,K) induced by the linear
73
+ action 'action', where G is an algebraic group and 'action' defines
74
+ an action of G on K^m (size(action) = m).
75
+ RETURN: ring, a polynomial ring over the same ground field as the basering,
76
+ containing the ideals 'groupid' and 'actionid'.
77
+ - 'groupid' is the ideal of the image of G (order <= order of G)
78
+ - 'actionid' defines the linear action of 'groupid' on K^m.
79
+ NOTE: 'action' and 'actionid' have the same orbits
80
+ all variables which give only rise to 0's in the m x m matrices of G
81
+ have been omitted.
82
+ ASSUME: basering K[s(1..r),t(1..m)] has r + m variables, G is the ideal of an
83
+ algebraic group and F is an action of G on K^m. G contains only the
84
+ variables s(1)...s(r). The action 'action' is given by polynomials
85
+ f_1,...,f_m in basering, s.t. on the ring level we have
86
+ K[t_1,...,t_m] --> K[s_1,...,s_r,t_1,...,t_m]/G
87
+ t_i --> f_i(s_1,...,s_r,t_1,...,t_m)
88
+ EXAMPLE: example ImageGroup; shows an example
89
+ "
90
+ {
91
+ intvec save_opt=option(get);option(pure_gb);
92
+ int i, j, k, newVars, nrt, imageSize, dbPrt;
93
+ ideal matrixEntries;
94
+ matrix coMx;
95
+ poly tVars;
96
+ string ringSTR1, ringSTR2, order;
97
+
98
+ dbPrt = printlevel-voice+2;
99
+ dbprint(dbPrt, "Image Group of " + string(Grp) + ", action = "
100
+ + string(Gaction));
101
+ def RIGB = basering;
102
+ string @mPoly = string(minpoly);
103
+ tVars = 1;
104
+ k = 0;
105
+
106
+ // compute the representation of G induced by Gaction, i.e., a matrix
107
+ // of size(Gaction) x size(Gaction) and polynomials in s(1),...,s(r) as
108
+ // entries
109
+ // the matrix is represented as the list 'matrixEntries' where
110
+ // the entries which are always 0 are omittet.
111
+
112
+ for(i = 1; i <= ncols(Gaction); i++)
113
+ {
114
+ tVars = tVars * var(i + nvars(basering) - ncols(Gaction));
115
+ }
116
+ for(i = 1; i <= ncols(Gaction); i++)
117
+ {
118
+ coMx = coef(Gaction[i], tVars);
119
+ for(j = 1; j <= ncols(coMx); j++)
120
+ {
121
+ k++;
122
+ matrixEntries[k] = coMx[2, j];
123
+ }
124
+ }
125
+ newVars = size(matrixEntries);
126
+ nrt = ncols(Gaction);
127
+
128
+ // this matrix defines an embedding of G into GL(m, K).
129
+ // in the next step the ideal of this image is computed
130
+ // note that we have omitted all variables which give give rise
131
+ // only to 0's. Note that z(1..newVars) are slack variables
132
+
133
+ def RIGR=addNvarsTo(basering,newVars,"z",1); setring RIGR;
134
+ ideal I1, I2, Gn, G, F, mEntries, newGaction;
135
+ G = imap(RIGB, Grp);
136
+ F = imap(RIGB, Gaction);
137
+ mEntries = imap(RIGB, matrixEntries);
138
+
139
+ // prepare the ideals needed to compute the image
140
+ // and compute the new action of the image on K^m
141
+
142
+ for(i=1;i<=size(mEntries);i++){ I1[i] = var(i + nvars(RIGB))-mEntries[i]; }
143
+ I1 = std(I1);
144
+
145
+ for(i = 1; i <= ncols(F); i++) { newGaction[i] = reduce(F[i], I1); }
146
+ I2 = G, I1;
147
+ I2 = std(I2);
148
+ Gn = nselect(I2, 1.. nvars(RIGB));
149
+ imageSize = ncols(Gn);
150
+
151
+ // create a new basering which might contain more variables
152
+ // s(1..newVars) as the original basering and map the ideal
153
+ // Gn (contains only z(1..newVars)) to this ring
154
+
155
+ list l1;
156
+ for (int zz = 1; zz <= newVars; zz++)
157
+ {
158
+ l1[size(l1)+1] = "s("+string(zz)+")";
159
+ }
160
+ for (int yy = 1; yy <= nrt; yy++)
161
+ {
162
+ l1[size(l1)+1] = "t("+string(yy)+")";
163
+ }
164
+ ring RIGS = create_ring(ring_list(basering)[1], l1, "lp");
165
+ ideal mapIdeal, groupid, actionid;
166
+ int offset;
167
+
168
+ // construct the map F : RIGB -> RIGS
169
+
170
+ for(i=1;i<=nvars(RIGB)-nrt;i++) { mapIdeal[i] = 0;} // s(i)-> 0
171
+ offset = nvars(RIGB) - nrt;
172
+ for(i=1;i<=nrt;i++) { mapIdeal[i+offset] = var(newVars + i);} // t(i)->t(i)
173
+ offset = offset + nrt;
174
+ for(i=1;i<=newVars;i++) { mapIdeal[i + offset] = var(i);} // z(i)->s(i)
175
+
176
+ // map Gn and newGaction to RIGS
177
+
178
+ map F = RIGR, mapIdeal;
179
+ groupid = F(Gn);
180
+ actionid = F(newGaction);
181
+ export groupid, actionid;
182
+ dbprint(dbPrt+1, "
183
+ // 'ImageGroup' created a new ring.
184
+ // To see the ring, type (if the name 'R' was assigned to the return value):
185
+ show(R);
186
+ // To access the ideal of the image of the input group and to access the new
187
+ // action of the group, type
188
+ setring R; groupid; actionid;
189
+ ");
190
+ setring RIGB;
191
+ option(set,save_opt);
192
+ return(RIGS);
193
+ }
194
+ example
195
+ {"EXAMPLE:"; echo = 2;
196
+ ring B = 0,(s(1..2), t(1..2)),dp;
197
+ ideal G = s(1)^3-1, s(2)^10-1;
198
+ ideal action = s(1)*s(2)^8*t(1), s(1)*s(2)^7*t(2);
199
+ def R = ImageGroup(G, action);
200
+ setring R;
201
+ groupid;
202
+ actionid;
203
+ }
204
+
205
+ ///////////////////////////////////////////////////////////////////////////////
206
+
207
+ proc HilbertWeights(ideal I,intvec wt)
208
+ "USAGE: HilbertWeights(I, w); ideal I, intvec wt
209
+ PURPOSE: compute the weights of the "slack" variables needed for the
210
+ computation of the algebraic relations of the generators of 'I' s.t.
211
+ the Hilbert driven 'std' can be used.
212
+ RETURN: intvec
213
+ ASSUME: basering = K[t_1,...,t_m,...], 'I' is quasihomogenous w.r.t. 'w' and
214
+ contains only polynomials in t_1,...,t_m
215
+ "
216
+ {
217
+ int offset = size(wt);
218
+ intvec wtn = wt;
219
+
220
+ for(int i = 1; i <= size(I); i++) { wtn[offset + i] = deg(I[i], wt); }
221
+ return(wtn);
222
+ }
223
+
224
+ ///////////////////////////////////////////////////////////////////////////////
225
+
226
+ proc HilbertSeries(ideal I,intvec wt)
227
+ "USAGE: HilbertSeries(I, w); ideal I, intvec wt
228
+ PURPOSE: compute the polynomial p of the Hilbert Series, represented by p/q, of
229
+ the ring K[t_1,...,t_m,y_1,...,y_r]/I1 where 'w' are the weights of
230
+ the variables, computed, e.g., by 'HilbertWeights', 'I1' is of the
231
+ form I[1] - y_1,...,I[r] - y_r and is quasihomogenous w.r.t. 'w'
232
+ RETURN: intvec
233
+ NOTE: the leading 0 of the result does not belong to p, but is needed in
234
+ the Hilbert driven 'std'.
235
+ "
236
+ {
237
+ int i;
238
+ intvec hs1;
239
+ matrix coMx;
240
+ poly f = 1;
241
+
242
+ for(i = 1; i <= ncols(I); i++) { f = f * (1 - var(1)^deg(I[i], wt));}
243
+ coMx = coeffs(f, var(1));
244
+ for(i = 1; i <= deg(f) + 1; i++) {
245
+ hs1[i] = int(coMx[i, 1]);
246
+ }
247
+ hs1[size(hs1) + 1] = 0;
248
+ return(hs1);
249
+ }
250
+ ///////////////////////////////////////////////////////////////////////////////
251
+
252
+ proc HilbertSeries1(wt)
253
+ "USAGE: HilbertSeries1(wt); ideal I, intvec wt
254
+ PURPOSE: compute the polynomial p of the Hilbert Series represented by p/q of
255
+ the ring K[t_1,...,t_m,y_1,...,y_r]/I where I is a complete inter-
256
+ section and the generator I[i] has degree wt[i]
257
+ RETURN: poly
258
+ "
259
+ {
260
+ int i, j;
261
+ intvec hs1;
262
+ matrix ma;
263
+ poly f = 1;
264
+
265
+ for(i = 1; i <= size(wt); i++) { f = f * (1 - var(1)^wt[i]);}
266
+ ma = coef(f, var(1));
267
+ j = ncols(ma);
268
+ for(i = 0; i <= deg(f); i++) {
269
+ if(var(1)^i == ma[1, j]) {
270
+ hs1[i + 1] = int(ma[2, j]);
271
+ j--;
272
+ }
273
+ else { hs1[i + 1] = 0; }
274
+ }
275
+ hs1[size(hs1) + 1] = 0;
276
+ return(hs1);
277
+ }
278
+
279
+ ///////////////////////////////////////////////////////////////////////////////
280
+
281
+ proc ImageVariety(ideal I,ideal F, list #)
282
+ "USAGE: ImageVariety(ideal I, F [, w]);ideal I; F is a list/ideal, intvec w.
283
+ PURPOSE: compute the Zariski closure of the image of the variety of I under
284
+ the morphism F.
285
+ NOTE: if 'I' and 'F' are quasihomogenous w.r.t. 'w' then the Hilbert-driven
286
+ 'std' is used.
287
+ RETURN: polynomial ring over the same ground field, containing the ideal
288
+ 'imageid'. The variables are Y(1),...,Y(k) where k = size(F)
289
+ - 'imageid' is the ideal of the Zariski closure of F(X) where
290
+ X is the variety of I.
291
+ EXAMPLE: example ImageVariety; shows an example
292
+ "
293
+ {
294
+ intvec save_opt=option(get);option(pure_gb);
295
+ int i, dbPrt, nrNewVars;
296
+ intvec wt, wth, hs1;
297
+ def RARB = basering;
298
+ nrNewVars = ncols(F);
299
+
300
+ dbPrt = printlevel-voice+2;
301
+ dbprint(dbPrt, "ImageVariety of " + string(I) + " under the map " + string(F));
302
+
303
+ if(size(#) > 0) { wt = #[1]; }
304
+
305
+ // create new ring for elimination, Y(1),...,Y(m) are slack variables.
306
+
307
+ //string @mPoly = string(minpoly);
308
+ def RAR1=addNvarsTo(basering,nrNewVars,"Y",1); setring RAR1;
309
+ list RAR2l=ringlist(RAR1);
310
+ list RAR2ll=RAR2l[2];
311
+ RAR2ll=RAR2ll[size(RAR2ll)-nrNewVars+1..size(RAR2ll)];
312
+ RAR2l[2]=RAR2ll;
313
+ RAR2l[3]=list(list("dp",1:nrNewVars),list("C",0));
314
+ def RAR2=ring(RAR2l);
315
+
316
+ ideal I, J1, J2, Fm;
317
+
318
+ I = imap(RARB, I);
319
+ Fm = imap(RARB, F);
320
+
321
+ if(size(wt) > 1) {
322
+ wth = HilbertWeights(Fm, wt);
323
+ hs1 = HilbertSeries(Fm, wt);
324
+ }
325
+
326
+ // get the ideal of the graph of F : X -> Y and compute a standard basis
327
+
328
+ for(i = 1; i <= nrNewVars; i++) { J1[i] = var(i + nvars(RARB)) - Fm[i];}
329
+ J1 = J1, I;
330
+ if(size(wt) > 1) {
331
+ J1 = std(J1, hs1, wth); // Hilbert-driven algorithm
332
+ }
333
+ else {
334
+ J1 = std(J1);
335
+ }
336
+
337
+ // forget all elements which contain other than the slack variables
338
+
339
+ J2 = nselect(J1, 1.. nvars(RARB));
340
+
341
+ setring RAR2;
342
+ ideal imageid = imap(RAR1, J2);
343
+ export(imageid);
344
+ dbprint(dbPrt+1, "
345
+ // 'ImageVariety' created a new ring.
346
+ // To see the ring, type (if the name 'R' was assigned to the return value):
347
+ show(R);
348
+ // To access the ideal of the image variety, type
349
+ setring R; imageid;
350
+ ");
351
+ setring RARB;
352
+ option(set,save_opt);
353
+ return(RAR2);
354
+ }
355
+ example
356
+ {"EXAMPLE:"; echo = 2;
357
+ ring B = 0,(x,y),dp;
358
+ ideal I = x4 - y4;
359
+ ideal F = x2, y2, x*y;
360
+ def R = ImageVariety(I, F);
361
+ setring R;
362
+ imageid;
363
+ }
364
+
365
+ ///////////////////////////////////////////////////////////////////////////////
366
+
367
+ proc LinearizeAction(ideal Grp,def Gaction, int nrs)
368
+ "USAGE: LinearizeAction(G,action,r); ideal G, action; int r
369
+ PURPOSE: linearize the group action 'action' and find an equivariant embedding
370
+ of K^m where m = size(action).
371
+ ASSUME: G contains only variables var(1..r) (r = nrs)
372
+ basering = K[s(1..r),t(1..m)], K = Q or K = Q(a) and minpoly != 0.
373
+ RETURN: polynomial ring containing the ideals 'actionid', 'embedid', 'groupid'
374
+ - 'actionid' is the ideal defining the linearized action of G
375
+ - 'embedid' is a parameterization of an equivariant embedding (closed)
376
+ - 'groupid' is the ideal of G in the new ring
377
+ NOTE: set printlevel > 0 to see a trace
378
+ EXAMPLE: example LinearizeAction; shows an example
379
+ "
380
+ {
381
+ intvec save_opt=option(get);option(pure_gb);
382
+ def altring = basering;
383
+ int i, j, k, ok, loop, nrt, sizeOfDecomp, dbPrt;
384
+ intvec wt;
385
+ ideal action, basis, G, reduceIdeal;
386
+ matrix decompMx;
387
+ poly actCoeff;
388
+ string str, order;
389
+
390
+ dbPrt = printlevel-voice+2;
391
+ dbprint(dbPrt, "LinearizeAction " + string(Gaction));
392
+ def RLAR = basering;
393
+ string @mPoly = string(minpoly);
394
+ order = ordstr(basering);
395
+ nrt = ncols(Gaction);
396
+ for(i = 1; i <= nrs; i++) { wt[i] = 0;}
397
+ for(i = nrs + 1; i <= nrs + nrt; i++) { basis[i - nrs] = var(i); wt[i] = 1;}
398
+ dbprint(dbPrt, " basis = " + string(basis));
399
+ if(attrib(Grp, "isSB")) { G = Grp; }
400
+ else
401
+ {
402
+ G = std(Grp);
403
+ }
404
+ reduceIdeal = G;
405
+ action = Gaction;
406
+ loop = 1;
407
+ i = 1;
408
+
409
+ // check if each component of 'action' is linear in t(1),...,t(nrt).
410
+
411
+ while(loop){
412
+ if(deg(action[i], wt) <= 1) {
413
+ sizeOfDecomp = 0;
414
+ dbprint(dbPrt, " " + string(action[i]) + " is linear");
415
+ }
416
+ else { // action[i] is not linear
417
+
418
+ // compute the minimal decomposition of action[i]
419
+ // action[i]=decompMx[1,1]*decompMx[2,1]+ ... +decompMx[1,k]*decompMx[2,k]
420
+ // decompMx[1,j] contains variables var(1)...var(nrs)
421
+ // decompMx[2,j] contains variables var(nrs + 1)...var(nvars(basering))
422
+
423
+ dbprint(dbPrt, " " + string(action[i])
424
+ + " is not linear, a minimal decomposition is :");
425
+ decompMx = MinimalDecomposition(action[i], nrs, nrt);
426
+ sizeOfDecomp = ncols(decompMx);
427
+ dbprint(dbPrt, decompMx);
428
+
429
+ for(j = 1; j <= sizeOfDecomp; j++) {
430
+ // check if decompMx[2,j] is a linear combination of basis elements
431
+ actCoeff = decompMx[2, j];
432
+ ok = LinearCombinationQ(basis, actCoeff, nrt + nrs);
433
+ if(ok == 0) {
434
+
435
+ // nonlinear element, compute new component of the action
436
+
437
+ dbprint(dbPrt, " the polynomial " + string(actCoeff)
438
+ + " is not a linear combination of the elements of basis");
439
+ nrt++;
440
+ if(defined(RLAB)) { kill RLAB;}
441
+ def RLAB = basering;
442
+ if(defined(RLAR)) { kill RLAR;}
443
+ ring RLAR = create_ring(ring_list(basering)[1], "(" + varstr(basering)+ ",t(" + string(nrt) + "))", "(" + order + ")");
444
+
445
+ ideal basis, action, G, reduceIdeal;
446
+ matrix decompMx;
447
+ map F;
448
+ poly actCoeff;
449
+
450
+ wt[nrs + nrt] = 1;
451
+ basis = imap(RLAB, basis), imap(RLAB, actCoeff);
452
+ action = imap(RLAB, action);
453
+ decompMx = imap(RLAB, decompMx);
454
+ actCoeff = imap(RLAB, actCoeff);
455
+ G = imap(RLAB, G);
456
+ attrib(G, "isSB", 1);
457
+ reduceIdeal = imap(RLAB, reduceIdeal), actCoeff - var(nrs + nrt);
458
+
459
+ // compute action on the new basis element
460
+
461
+ for(k = 1; k <= nrs; k++) { F[k] = 0;}
462
+ for(k = nrs + 1; k < nrs + nrt; k++) { F[k] = action[k - nrs];}
463
+ actCoeff = reduce(F(actCoeff), G);
464
+ action[ncols(action) + 1] = actCoeff;
465
+ dbprint(dbPrt, " extend basering by " + string(var(nrs + nrt)));
466
+ dbprint(dbPrt, " new basis = " + string(basis));
467
+ dbprint(dbPrt, " action of G on new basis element = "
468
+ + string(actCoeff));
469
+ dbprint(dbPrt, " decomp : " + string(decompMx[2, j]) + " -> "
470
+ + string(var(nrs + nrt)));
471
+ } // end if
472
+ else {
473
+ dbprint(dbPrt, " the polynomial " + string(actCoeff)
474
+ + " is a linear combination of the elements of basis");
475
+ }
476
+ } // end for
477
+ reduceIdeal = std(reduceIdeal);
478
+ action[i] = reduce(action[i], reduceIdeal);
479
+ } // end else
480
+ if(i < ncols(action)) { i++;}
481
+ else {loop = 0;}
482
+ } // end while
483
+ if(defined(actionid)) { kill actionid; }
484
+ ideal actionid, embedid, groupid;
485
+ actionid = action;
486
+ embedid = basis;
487
+ groupid = G;
488
+ export actionid, embedid, groupid;
489
+ dbprint(dbPrt+1, "
490
+ // 'LinearizeAction' created a new ring.
491
+ // To see the ring, type (if the name 'R' was assigned to the return value):
492
+ show(R);
493
+ // To access the new action and the equivariant embedding, type
494
+ setring R; actionid; embedid; groupid
495
+ ");
496
+ setring altring;
497
+ option(set,save_opt);
498
+ return(RLAR);
499
+ }
500
+ example
501
+ {"EXAMPLE:"; echo = 2;
502
+ ring B = 0,(s(1..5), t(1..3)),dp;
503
+ ideal G = s(3)-s(4), s(2)-s(5), s(4)*s(5), s(1)^2*s(4)+s(1)^2*s(5)-1, s(1)^2*s(5)^2-s(5), s(4)^4-s(5)^4+s(1)^2, s(1)^4+s(4)^3-s(5)^3, s(5)^5-s(1)^2*s(5);
504
+ ideal action = -s(4)*t(1)+s(5)*t(1), -s(4)^2*t(2)+2*s(4)^2*t(3)^2+s(5)^2*t(2), s(4)*t(3)+s(5)*t(3);
505
+ LinearActionQ(action, 5);
506
+ def R = LinearizeAction(G, action, 5);
507
+ setring R;
508
+ R;
509
+ actionid;
510
+ embedid;
511
+ groupid;
512
+ LinearActionQ(actionid, 5);
513
+ }
514
+
515
+ ///////////////////////////////////////////////////////////////////////////////
516
+
517
+ proc LinearActionQ(def Gaction, int nrs)
518
+ "USAGE: LinearActionQ(action,nrs); ideal action, int nrs
519
+ PURPOSE: check whether the action defined by 'action' is linear w.r.t. the
520
+ variables var(nrs + 1...nvars(basering)).
521
+ RETURN: 0 action not linear
522
+ 1 action is linear
523
+ EXAMPLE: example LinearActionQ; shows an example
524
+ "
525
+ {
526
+ int i, nrt, loop;
527
+ intvec wt;
528
+
529
+ nrt = ncols(Gaction);
530
+ for(i = 1; i <= nrs; i++) { wt[i] = 0;}
531
+ for(i = nrs + 1; i <= nrs + nrt; i++) { wt[i] = 1;}
532
+ loop = 1;
533
+ i = 1;
534
+ while(loop)
535
+ {
536
+ if(deg(Gaction[i], wt) > 1) { loop = 0; }
537
+ else
538
+ {
539
+ i++;
540
+ if(i > ncols(Gaction)) { loop = 0;}
541
+ }
542
+ }
543
+ return(i > ncols(Gaction));
544
+ }
545
+ example
546
+ {"EXAMPLE:"; echo = 2;
547
+ ring R = 0,(s(1..5), t(1..3)),dp;
548
+ ideal G = s(3)-s(4), s(2)-s(5), s(4)*s(5), s(1)^2*s(4)+s(1)^2*s(5)-1,
549
+ s(1)^2*s(5)^2-s(5), s(4)^4-s(5)^4+s(1)^2, s(1)^4+s(4)^3-s(5)^3,
550
+ s(5)^5-s(1)^2*s(5);
551
+ ideal Gaction = -s(4)*t(1)+s(5)*t(1),
552
+ -s(4)^2*t(2)+2*s(4)^2*t(3)^2+s(5)^2*t(2),
553
+ s(4)*t(3)+s(5)*t(3);
554
+ LinearActionQ(Gaction, 5);
555
+ LinearActionQ(Gaction, 8);
556
+ }
557
+
558
+ ///////////////////////////////////////////////////////////////////////////////
559
+
560
+ proc LinearCombinationQ(ideal I, poly f)
561
+ "USAGE: LinearCombination(I, f); ideal I, poly f
562
+ PURPOSE: test whether f can be written as a linear combination of the generators of I.
563
+ RETURN: 0 f is not a linear combination
564
+ 1 f is a linear combination
565
+ "
566
+ {
567
+ int i, loop, sizeJ;
568
+ ideal J;
569
+
570
+ J = I, f;
571
+ sizeJ = size(J);
572
+
573
+ def RLC = ImageVariety(ideal(0), J); // compute algebraic relations
574
+ setring RLC;
575
+ matrix coMx;
576
+ poly relation = 0;
577
+
578
+ loop = 1;
579
+ i = 1;
580
+ while(loop)
581
+ { // look for a linear relation containing Y(nr)
582
+ if(deg(imageid[i]) == 1)
583
+ {
584
+ coMx = coef(imageid[i], var(sizeJ));
585
+ if(coMx[1,1] == var(sizeJ))
586
+ {
587
+ relation = imageid[i];
588
+ loop = 0;
589
+ }
590
+ }
591
+ else
592
+ {
593
+ i++;
594
+ if(i > ncols(imageid)) { loop = 0;}
595
+ }
596
+ }
597
+ return(i <= ncols(imageid));
598
+ }
599
+
600
+ ///////////////////////////////////////////////////////////////////////////////
601
+
602
+ proc InvariantRing(ideal G, ideal action, list #)
603
+ "USAGE: InvariantRing(G, Gact [, opt]); ideal G, Gact; int opt
604
+ PURPOSE: compute generators of the invariant ring of G w.r.t. the action 'Gact'
605
+ ASSUME: G is a finite group and 'Gact' is a linear action.
606
+ RETURN: ring R; this ring comes with the ideals 'invars' and 'groupid' and
607
+ with the poly 'newA':
608
+ - 'invars' contains the algebra generators of the invariant ring
609
+ - 'groupid' is the ideal of G in the new ring
610
+ - 'newA' is the new representation of the primitive root of the
611
+ minimal polynomial of the ring which was active when calling the
612
+ procedure (if the minpoly did not change, 'newA' is set to 'a').
613
+ NOTE: the minimal polynomial of the output ring depends on some random
614
+ choices
615
+ EXAMPLE: example InvariantRing; shows an example
616
+ "
617
+ {
618
+ intvec save_opt=option(get);option(pure_gb);
619
+ int i, ok, dbPrt, noReynolds, primaryDec;
620
+ ideal invarsGens, groupid;
621
+
622
+ dbPrt = printlevel-voice+2;
623
+
624
+ if(size(#) > 0) { primaryDec = #[1]; }
625
+ else { primaryDec = 0; }
626
+
627
+ dbprint(dbPrt, "InvariantRing of " + string(G));
628
+ dbprint(dbPrt, " action = " + string(action));
629
+
630
+ if(!attrib(G, "isSB"))
631
+ {
632
+ groupid = std(G);
633
+ }
634
+ else { groupid = G; }
635
+
636
+ // compute the nullcone of G by means of Derksen's algorithm
637
+
638
+ invarsGens = NullCone(groupid, action); // compute nullcone of linear action
639
+ dbprint(dbPrt, " generators of zero-fibre ideal are " + string(invarsGens));
640
+
641
+ // make all generators of the nullcone invariant
642
+ // if necessary, compute the Reynolds Operator, i.e., find all elements
643
+ // of the variety defined by G. It might be necessary to extend the
644
+ // ground field.
645
+
646
+ def IRB = basering;
647
+ if(defined(RIRR)) { kill RIRR;}
648
+ def RIRR = basering;
649
+ setring RIRR;
650
+ // export(RIRR);
651
+ // export(invarsGens);
652
+ noReynolds = 1;
653
+ dbprint(dbPrt, " nullcone is generated by " + string(size(invarsGens)));
654
+ dbprint(dbPrt, " degrees = " + string(maxdeg(invarsGens)));
655
+ for(i = 1; i <= ncols(invarsGens); i++){
656
+ ok = InvariantQ(invarsGens[i], groupid, action);
657
+ if(ok) { dbprint(dbPrt, string(i) + ": poly " + string(invarsGens[i])
658
+ + " is invariant");}
659
+ else {
660
+ if(noReynolds) {
661
+
662
+ // compute the Reynolds operator and change the ring !
663
+ noReynolds = 0;
664
+ def RORN = ReynoldsOperator(groupid, action, primaryDec);
665
+ setring RORN;
666
+ ideal groupid = std(id);
667
+ ideal action = actionid;
668
+ setring RIRR;
669
+ string parName, minPoly;
670
+ poly minPolyP;
671
+ if(npars(basering) == 0)
672
+ {
673
+ parName = "a";
674
+ minPoly = "0";
675
+ }
676
+ else
677
+ {
678
+ parName = parstr(basering);
679
+ minPoly = string(minpoly);
680
+ minPolyP=minpoly;
681
+ }
682
+ ring RA1 = create_ring(0, "(" + varstr(basering) + "," + parName + ")", "lp");
683
+ if (minPoly!="0") { ideal mpoly = std(imap(RIRR, minPolyP)); }
684
+ ideal I = imap(RIRR,invarsGens);
685
+ setring RORN;
686
+ map Phi = RA1, maxideal(1);
687
+ Phi[nvars(RORN) + 1] = newA;
688
+ ideal invarsGens = Phi(I);
689
+ kill Phi,RA1,RIRR;
690
+ // end of ersetzt durch
691
+
692
+ }
693
+ dbprint(dbPrt, string(i) + ": poly " + string(invarsGens[i])
694
+ + " is NOT invariant");
695
+ invarsGens[i] = ReynoldsImage(ROelements, invarsGens[i]);
696
+ dbprint(dbPrt, " --> " + string(invarsGens[i]));
697
+ }
698
+ }
699
+ for(i = 1; i <= ncols(invarsGens); i++)
700
+ {
701
+ ok = InvariantQ(invarsGens[i], groupid, action);
702
+ if(ok) { dbprint(dbPrt, string(i) + ": poly " + string(invarsGens[i])
703
+ + " is invariant"); }
704
+ else { print(string(i) + ": Fatal Error with Reynolds ");}
705
+ }
706
+ if(noReynolds == 0)
707
+ {
708
+ def RIRS = RORN;
709
+ setring RIRS;
710
+ kill RORN;
711
+ export groupid;
712
+ }
713
+ else
714
+ {
715
+ def RIRS = RIRR;
716
+ kill RIRR;
717
+ setring RIRS;
718
+ export groupid;
719
+ }
720
+ ideal invars = invarsGens;
721
+ kill invarsGens;
722
+ if (defined(ROelements)) { kill ROelements,actionid,theZeroset,id; }
723
+ export invars;
724
+ dbprint(dbPrt+1, "
725
+ // 'InvariantRing' created a new ring.
726
+ // To see the ring, type (if the name 'R' was assigned to the return value):
727
+ show(R);
728
+ // To access the generators of the invariant ring type
729
+ setring R; invars;
730
+ // Note that the input group G is stored in R as the ideal 'groupid'; to
731
+ // see it, type
732
+ groupid;
733
+ // Note that 'InvariantRing' might change the minimal polynomial
734
+ // The representation of the algebraic number is given by 'newA'
735
+ ");
736
+ setring IRB;
737
+ option(set,save_opt);
738
+ return(RIRS);
739
+ }
740
+ example
741
+ {"EXAMPLE:"; echo = 2;
742
+ ring B = 0, (s(1..2), t(1..2)), dp;
743
+ ideal G = -s(1)+s(2)^3, s(1)^4-1;
744
+ ideal action = s(1)*t(1), s(2)*t(2);
745
+
746
+ def R = InvariantRing(std(G), action);
747
+ setring R;
748
+ invars;
749
+ }
750
+
751
+ ///////////////////////////////////////////////////////////////////////////////
752
+
753
+ proc InvariantQ(poly f, ideal G,def action)
754
+ "USAGE: InvariantQ(f, G, action); poly f; ideal G, action
755
+ PURPOSE: check whether the polynomial f is invariant w.r.t. G, where G acts via
756
+ 'action' on K^m.
757
+ ASSUME: basering = K[s_1,...,s_m,t_1,...,t_m] where K = Q of K = Q(a) and
758
+ minpoly != 0, f contains only t_1,...,t_m, G is the ideal of an
759
+ algebraic group and a standardbasis.
760
+ RETURN: int;
761
+ 0 if f is not invariant,
762
+ 1 if f is invariant
763
+ NOTE: G need not be finite
764
+ "
765
+ {
766
+ def altring=basering;
767
+ map F;
768
+ if(deg(f) == 0) { return(1); }
769
+ for(int i = 1; i <= size(action); i++) {
770
+ F[nvars(basering) - size(action) + i] = action[i];
771
+ }
772
+ return(reduce(f - F(f), G) == 0);
773
+ }
774
+
775
+ ///////////////////////////////////////////////////////////////////////////////
776
+
777
+ proc MinimalDecomposition(poly f, int nrs, int nrt)
778
+ "USAGE: MinimalDecomposition(f,a,b); poly f; int a, b.
779
+ PURPOSE: decompose f as a sum M[1,1]*M[2,1] + ... + M[1,r]*M[2,r] where M[1,i]
780
+ contains only s(1..a), M[2,i] contains only t(1...b) s.t. r is minimal
781
+ ASSUME: f polynomial in K[s(1..a),t(1..b)], K = Q or K = Q(a) and minpoly != 0
782
+ RETURN: 2 x r matrix M s.t. f = M[1,1]*M[2,1] + ... + M[1,r]*M[2,r]
783
+ EXAMPLE: example MinimalDecomposition;
784
+ "
785
+ {
786
+ int i, sizeOfMx, changed, loop;
787
+ list initialTerms;
788
+ matrix coM1, coM2, coM, decompMx, auxM;
789
+ matrix m[2][2] = 0,1,1,0;
790
+ poly vars1, vars2;
791
+
792
+ if(f == 0) { return(decompMx); }
793
+
794
+ // first decompose f w.r.t. t(1..nrt)
795
+ // then decompose f w.r.t. s(1..nrs)
796
+
797
+ vars1 = RingVarProduct(nrs+1..nrt+nrs);
798
+ vars2 = RingVarProduct(1..nrs);
799
+ coM1 = SimplifyCoefficientMatrix(m*coef(f, vars1)); // exchange rows of decomposition
800
+ coM2 = SimplifyCoefficientMatrix(coef(f, vars2));
801
+ if(ncols(coM2) < ncols(coM1)) {
802
+ auxM = coM1;
803
+ coM1 = coM2;
804
+ coM2 = auxM;
805
+ }
806
+ decompMx = coM1; // decompMx is the smaller decomposition
807
+ if(ncols(decompMx) == 1) { return(decompMx);} // n = 1 is minimal
808
+ changed = 0;
809
+ loop = 1;
810
+ i = 1;
811
+
812
+ // first loop, try coM1
813
+
814
+ while(loop) {
815
+ coM = MinimalDecomposition(f - coM1[1, i]*coM1[2, i], nrs, nrt);
816
+ if(size(coM) == 1) { sizeOfMx = 0; } // coM = 0
817
+ else {sizeOfMx = ncols(coM); } // number of columns
818
+ if(sizeOfMx + 1 < ncols(decompMx)) { // shorter decomposition
819
+ changed = 1;
820
+ decompMx = coM;
821
+ initialTerms[1] = coM1[1, i];
822
+ initialTerms[2] = coM1[2, i];
823
+ }
824
+ if(sizeOfMx == 1) { loop = 0;} // n = 2 is minimal
825
+ if(i < ncols(coM1)) {i++;}
826
+ else {loop = 0;}
827
+ }
828
+ if(sizeOfMx > 1) { // n > 2
829
+ loop = 1; // coM2 might yield
830
+ i = 1; // a smaller decomposition
831
+ }
832
+
833
+ // first loop, try coM2
834
+
835
+ while(loop) {
836
+ coM = MinimalDecomposition(f - coM2[1, i]*coM2[2, i], nrs, nrt);
837
+ if(size(coM) == 1) { sizeOfMx = 0; }
838
+ else {sizeOfMx = ncols(coM); }
839
+ if(sizeOfMx + 1 < ncols(decompMx)) {
840
+ changed = 1;
841
+ decompMx = coM;
842
+ initialTerms[1] = coM2[1, i];
843
+ initialTerms[2] = coM2[2, i];
844
+ }
845
+ if(sizeOfMx == 1) { loop = 0;}
846
+ if(i < ncols(coM2)) {i++;}
847
+ else {loop = 0;}
848
+ }
849
+ if(!changed) { return(decompMx); }
850
+ if(size(decompMx) == 1) { matrix decompositionM[2][1];}
851
+ else { matrix decompositionM[2][ncols(decompMx) + 1];}
852
+ decompositionM[1, 1] = initialTerms[1];
853
+ decompositionM[2, 1] = initialTerms[2];
854
+ if(size(decompMx) > 1) {
855
+ for(i = 1; i <= ncols(decompMx); i++) {
856
+ decompositionM[1, i + 1] = decompMx[1, i];
857
+ decompositionM[2, i + 1] = decompMx[2, i];
858
+ }
859
+ }
860
+ return(decompositionM);
861
+ }
862
+ example
863
+ {"EXAMPLE:"; echo = 2;
864
+ ring R = 0, (s(1..2), t(1..2)), dp;
865
+ poly h = s(1)*(t(1) + t(1)^2) + (t(2) + t(2)^2)*(s(1)^2 + s(2));
866
+ matrix M = MinimalDecomposition(h, 2, 2);
867
+ M;
868
+ M[1,1]*M[2,1] + M[1,2]*M[2,2] - h;
869
+ }
870
+
871
+ ///////////////////////////////////////////////////////////////////////////////
872
+
873
+ proc NullCone(ideal G,def action)
874
+ "USAGE: NullCone(G, action); ideal G, action
875
+ PURPOSE: compute the ideal of the nullcone of the linear action of G on K^n,
876
+ given by 'action', by means of Deksen's algorithm
877
+ ASSUME: basering = K[s(1..r),t(1..n)], K = Q or K = Q(a) and minpoly != 0,
878
+ G is an ideal of a reductive algebraic group in K[s(1..r)],
879
+ 'action' is a linear group action of G on K^n (n = ncols(action))
880
+ RETURN: ideal of the nullcone of G.
881
+ NOTE: the generators of the nullcone are homogeneous, but in general not invariant
882
+ EXAMPLE: example NullCone; shows an example
883
+ "
884
+ {
885
+ intvec save_opt=option(get);option(pure_gb);
886
+ int i, nt, dbPrt, offset, groupVars;
887
+ string ringSTR, vars, order;
888
+ def RNCB = basering;
889
+
890
+ // prepare the ring needed for the computation
891
+ // s(1...) variables of the group
892
+ // t(1...) variables of the affine space
893
+ // y(1...) additional 'slack' variables
894
+
895
+ nt = size(action);
896
+ order = "(dp(" + string(nvars(basering) - nt) + "), dp)";
897
+ // ring for the computation
898
+
899
+ string @minPoly = string(minpoly);
900
+ offset = size(G) + nt;
901
+ list l2;
902
+ for (int xx = 1; xx <= (nvars(basering) - nt); xx++)
903
+ {
904
+ l2[size(l2)+1] = "s("+string(xx)+")";
905
+ }
906
+ for (int yy = 1; yy <= nt; yy++)
907
+ {
908
+ l2[size(l2)+1] = "t("+string(yy)+")";
909
+ }
910
+ for (int zz = 1; zz <= nt; zz++)
911
+ {
912
+ l2[size(l2)+1] = "Y("+string(zz)+")";
913
+ }
914
+ ring RNCR = create_ring(ring_list(basering)[1], l2, order);
915
+ ideal action, G, I, J, N, generators;
916
+ map F;
917
+ poly f;
918
+
919
+ // built the ideal of the graph of GxV -> V, (s,v) -> s(v), i.e.
920
+ // of the image of the map GxV -> GxVxV, (s,v) -> (s,v,s(v))
921
+
922
+ G = fetch(RNCB, G);
923
+ action = fetch(RNCB, action);
924
+ groupVars = nvars(basering) - 2*nt;
925
+ offset = groupVars + nt;
926
+ I = G;
927
+ for(i = 1; i <= nt; i = i + 1) {
928
+ I = I, var(offset + i) - action[i];
929
+ }
930
+
931
+ J = std(I); // takes long, try to improve
932
+
933
+ // eliminate
934
+
935
+ N = nselect(J, 1.. groupVars);
936
+
937
+ // substitute
938
+ for(i = 1; i <= nvars(basering); i = i + 1) { F[i] = 0; }
939
+ for(i = groupVars + 1; i <= offset; i = i + 1) { F[i] = var(i); }
940
+
941
+ generators = mstd(F(N))[2];
942
+ setring RNCB;
943
+ option(set,save_opt);
944
+ return(fetch(RNCR, generators));
945
+ }
946
+ example
947
+ {"EXAMPLE:"; echo = 2;
948
+ ring R = 0, (s(1..2), x, y), dp;
949
+ ideal G = -s(1)+s(2)^3, s(1)^4-1;
950
+ ideal action = s(1)*x, s(2)*y;
951
+
952
+ ideal inv = NullCone(G, action);
953
+ inv;
954
+ }
955
+
956
+ ///////////////////////////////////////////////////////////////////////////////
957
+
958
+ proc ReynoldsOperator(ideal Grp, ideal Gaction, list #)
959
+ "USAGE: ReynoldsOperator(G, action [, opt]); ideal G, action; int opt
960
+ PURPOSE: compute the Reynolds operator of the group G which acts via 'action'
961
+ RETURN: polynomial ring R over a simple extension of the ground field of the
962
+ basering (the extension might be trivial), containing a list
963
+ 'ROelements', the ideals 'id', 'actionid' and the polynomial 'newA'.
964
+ R = K(a)[s(1..r),t(1..n)].
965
+ - 'ROelements' is a list of ideals, each ideal represents a
966
+ substitution map F : R -> R according to the zero-set of G
967
+ - 'id' is the ideal of G in the new ring
968
+ - 'newA' is the new representation of a' in terms of a. If the
969
+ basering does not contain a parameter then 'newA' = 'a'.
970
+ ASSUME: basering = K[s(1..r),t(1..n)], K = Q or K = Q(a') and minpoly != 0,
971
+ G is the ideal of a finite group in K[s(1..r)], 'action' is a linear
972
+ group action of G
973
+ "
974
+ {
975
+ intvec saveOpt=option(get);option(pure_gb);
976
+ def ROBR = basering;
977
+ int i, j, n, ns, primaryDec;
978
+ ideal G1 = Grp;
979
+ list solution, saction;
980
+ string str;
981
+
982
+ if(size(#) > 0) { primaryDec = #[1]; }
983
+ else { primaryDec = 0; }
984
+ kill #;
985
+
986
+ n = nvars(basering);
987
+ ns = n - size(Gaction);
988
+ for(i = ns + 1; i <= n; i++) { G1 = G1, var(i);}
989
+
990
+ def RORR = zeroSet(G1, primaryDec);
991
+ setring ROBR;
992
+ string parName, minPoly;
993
+ poly minPolyP;
994
+ if(npars(basering) == 0) {
995
+ parName = "a";
996
+ minPoly = "0";
997
+ }
998
+ else {
999
+ parName = parstr(basering);
1000
+ minPoly = string(minpoly);
1001
+ minPolyP=minpoly;
1002
+ }
1003
+ ring RA1 = create_ring(0, "(" + varstr(basering) + "," + parName + ")", "lp");
1004
+ if (minPoly!="0") { ideal mpoly = std(imap(ROBR,minPolyP)); }
1005
+ ideal Grp = imap(ROBR,Grp);
1006
+ ideal Gaction = imap(ROBR,Gaction);
1007
+ setring RORR;
1008
+ map Phi = RA1, maxideal(1);
1009
+ Phi[nvars(RORR) + 1] = newA;
1010
+ id = Phi(Grp); // id already defined by zeroSet of level 0
1011
+ ideal actionid = Phi(Gaction);
1012
+ kill parName,minPoly,Phi,RA1;
1013
+ // end of ersetzt durch
1014
+ list ROelements;
1015
+ ideal Rf;
1016
+ map groupElem;
1017
+ poly h1, h2;
1018
+
1019
+ for(i = 1; i <= size(theZeroset); i++) {
1020
+ groupElem = theZeroset[i]; // element of G
1021
+ for(j = ns + 1; j<=n; j++) { groupElem[j] = var(j); } //do not change t's
1022
+ for(j = 1; j <= n - ns; j++) {
1023
+ h1 = actionid[j];
1024
+ h2 = groupElem(h1);
1025
+ Rf[ns + j] = h2;
1026
+ }
1027
+ ROelements[i] = Rf;
1028
+ }
1029
+ export actionid, ROelements;
1030
+ setring ROBR;
1031
+ option(set,saveOpt);
1032
+ return(RORR);
1033
+ }
1034
+
1035
+ ///////////////////////////////////////////////////////////////////////////////
1036
+
1037
+ proc ReynoldsImage(list reynoldsOp, poly f)
1038
+ "USAGE: ReynoldsImage(RO, f); list RO, poly f
1039
+ PURPOSE: compute the Reynolds image of the polynomial f, where RO represents
1040
+ the Reynolds operator
1041
+ RETURN: poly
1042
+ "
1043
+ {
1044
+ def RIBR=basering;
1045
+ map F;
1046
+ poly h = 0;
1047
+
1048
+ for(int i = 1; i <= size(reynoldsOp); i++) {
1049
+ F = RIBR, reynoldsOp[i];
1050
+ h = h + F(f);
1051
+ }
1052
+ return(h/size(reynoldsOp));
1053
+ }
1054
+
1055
+ ///////////////////////////////////////////////////////////////////////////////
1056
+
1057
+ static proc SimplifyCoefficientMatrix(matrix coefMatrix)
1058
+ "USAGE: SimplifyCoefficientMatrix(M); M matrix coming from coef(...)
1059
+ PURPOSE: simplify the matrix, i.e. find linear dependencies among the columns
1060
+ RETURN: matrix M, f = M[1,1]*M[2,1] + ... + M[1,n]*M[2,n]
1061
+ "
1062
+ {
1063
+ int i, j , loop;
1064
+ intvec columnList;
1065
+ matrix decompMx = coefMatrix;
1066
+
1067
+ loop = 1;
1068
+ i = 1;
1069
+ while(loop) {
1070
+ columnList = 1..i; // current column
1071
+ for(j = i + 1; j <= ncols(decompMx); j++) {
1072
+ // test if decompMx[2, j] equals const * decompMx[2, i]
1073
+ if(LinearCombinationQ(ideal(decompMx[2, i]), decompMx[2, j])) { // column not needed
1074
+ decompMx[1, i] = decompMx[1, i] + decompMx[2, j] / decompMx[2, i] * decompMx[1, j];
1075
+ }
1076
+ else { columnList[size(columnList) + 1] = j; }
1077
+ }
1078
+ if(defined(auxM)) { kill auxM;}
1079
+ matrix auxM[2][size(columnList)]; // built new matrix and omit
1080
+ for(j = 1; j <= size(columnList); j++) // the linear dependent columns
1081
+ {
1082
+ auxM[1, j] = decompMx[1, columnList[j]]; // found above
1083
+ auxM[2, j] = decompMx[2, columnList[j]];
1084
+ }
1085
+ decompMx = auxM;
1086
+ if(i < ncols(decompMx) - 1) { i++;}
1087
+ else { loop = 0;}
1088
+ }
1089
+ return(decompMx);
1090
+ }
1091
+
1092
+ ///////////////////////////////////////////////////////////////////////////////
1093
+
1094
+ proc SimplifyIdeal(ideal I, list #)
1095
+ "USAGE: SimplifyIdeal(I [,m, name]); ideal I; int m, string name"
1096
+ PURPOSE: simplify ideal I to the ideal I', do not change the names of the
1097
+ first m variables, new ideal I' might contain less variables.
1098
+ I' contains variables var(1..m)
1099
+ RETURN: list
1100
+ _[1] ideal I'
1101
+ _[2] ideal representing a map phi to a ring with probably less vars. s.th.
1102
+ phi(I) = I'
1103
+ _[3] list of variables
1104
+ _[4] list from 'elimpart'
1105
+ "
1106
+ {
1107
+ int i, k, m;
1108
+ string nameCMD;
1109
+ ideal mId, In, mapId; // ideal for the map
1110
+ list sList, result;
1111
+
1112
+ sList = elimpart(I);
1113
+ In = sList[1];
1114
+ mapId = sList[5];
1115
+
1116
+ if(size(#) > 0)
1117
+ {
1118
+ m = #[1];
1119
+ nameCMD = #[2];
1120
+ }
1121
+ else { m = 0;} // nvars(basering);
1122
+ k = 0;
1123
+ for(i = 1; i <= nvars(basering); i++)
1124
+ {
1125
+ if(sList[4][i] != 0)
1126
+ {
1127
+ k++;
1128
+ if(k <= m) { mId[i] = sList[4][i]; }
1129
+ else { execute("mId["+string(i) +"] = "+nameCMD+"("+string(k-m)+");");}
1130
+ }
1131
+ else { mId[i] = 0;}
1132
+ }
1133
+ map phi = basering, mId;
1134
+ result[1] = phi(In);
1135
+ result[2] = phi(mapId);
1136
+ result[3] = simplify(sList[4], 2);
1137
+ result[4] = sList;
1138
+ return(result);
1139
+ }
1140
+
1141
+ ///////////////////////////////////////////////////////////////////////////////
1142
+
1143
+ proc RingVarProduct(def index)
1144
+ // list of indices
1145
+ {
1146
+ poly f = 1;
1147
+ for(int i = 1; i <= size(index); i++)
1148
+ {
1149
+ f = f * var(index[i]);
1150
+ }
1151
+ return(f);
1152
+ }
1153
+ ///////////////////////////////////////////////////////////////////////////////