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,1366 @@
1
+ ////////////////////////////////////////////////////////////////////////////
2
+ version="version graal.lib 4.2.0.1 Jan_2021 "; // $Id: c51f7416748d2d25134b3eda4f4d9d11c8f5e161 $
3
+ category="Commutative Algebra";
4
+ info="
5
+ LIBRARY: graal.lib localization at prime ideals and their associated graded rings
6
+ AUTHOR: Magdaleen Marais, magdaleen@aims.ac.za
7
+ Yue Ren, ren@mathematik.uni-kl.de
8
+
9
+ OVERVIEW:
10
+ This library is on a computational treatment of localizations at prime ideals
11
+ and their associated graded rings based on a work of Mora.
12
+ Not only does it construct a ring isomorphic to the localization of an affine
13
+ coordinate ring at a prime ideal,
14
+ the algorithms in this library aim to exploit the topology in the localization
15
+ by computing first and foremost in the associated graded ring and lifting
16
+ the result to the localization afterwards.
17
+ Features include a check for regularity and the resolution of ideals.
18
+
19
+ REFERENCES:
20
+ Mora, Teo: La queste del Saint Gr_a(A_L): A computational approach to local algebra
21
+ Marais, Magdaleen and Ren, Yue: Mora's holy graal: Algorithms for computing in localizations at prime ideals
22
+
23
+ PROCEDURES:
24
+ graalMixed(ideal L[,int t]); construct graalBearer
25
+ dimensionOfLocalization(def L); dimension of the localization A_L of A at L
26
+ systemOfParametersOfLocalization(def L); system of parameter of the localization A_L of A at L
27
+ isLocalizationRegular(def L); test if localization A_L of A at L is regular
28
+ warkedPreimageStd(warkedModule wM); std for warkedModule
29
+ resolutionInLocalization(ideal I, def L); the resolution of I*A_L
30
+ ";
31
+
32
+ LIB "general.lib"; // for watchdog
33
+ LIB "polylib.lib"; // for hilbPoly
34
+ LIB "standard.lib"; // for res
35
+
36
+ static proc mod_init()
37
+ {
38
+ /***
39
+ * graalBearer is a structure that contains those objects
40
+ * of the intermediate steps to computing the associated graded algebra
41
+ * that are worth saving for future computations. These are:
42
+ *
43
+ * ring A affine coordinate ring
44
+ * ideal L ideal cutting out the subvariety
45
+ * int s number of generators of L
46
+ * ring Q polynomial ring of the ambient space
47
+ * ideal H ideal such that A=Q/H
48
+ * ideal J preimage of L
49
+ * ring Q0y Q^0[Y1,...,Ys]
50
+ * ideal scriptI <Y1-f1,...,Ys-fs>, where f1,...,fs are the generators of L
51
+ * ring Al the ring A_L = Q0y/scriptI
52
+ * ring Ky K[Y1,...,Ys], where K quotient field of A/L
53
+ * ideal scriptIin I_in
54
+ * ring Graal associated graded ring, isomorphic to Ky/scriptIin
55
+ * map ina Al -> Graal, maps standard basis of ideals
56
+ * to standard basis of their respective initial ideals
57
+ **/
58
+ newstruct("graalBearer","int s, ring A, ideal L, ring Q, ideal H, ideal J, ring Q0, ideal J0, ring Q0y, ideal scriptI, ring Al, ring Ky, ideal scriptIin, map Q0yToKy, ring Graal, map ina");
59
+ system("install","graalBearer","print",graalBearer_print,1);
60
+
61
+ /***
62
+ * warkedModule is a structure built to hold two corresponding modules in Ay and Ky respectively.
63
+ * More precisely, it contains space for:
64
+ * graalBearer Gr a graalBearer containing all relevant global structures
65
+ * module modQ0y a module M over Q0y
66
+ * module stdmodQ0y a standard basis of M with respect to the weight w
67
+ * matrix qQ0y a transformation matrix over Q0y such that
68
+ * stdmodAy = qQ0y*modQ0y
69
+ * module modKy a module M_in over Ky
70
+ * module stdmodKy a standard basis of M_in
71
+ * matrix qKy a transformation Matrix over Ky such that
72
+ * stdmodKy = qKy*modKy
73
+ * intvec w an intvec containing the weights on M
74
+ * Note: "wark" is a scots noun for building
75
+ **/
76
+ newstruct("warkedModule","graalBearer Gr, module modQ0y, module stdmodQ0y, matrix qQ0y, module modKy, module stdmodKy, matrix qKy, intvec w");
77
+ system("install","warkedModule","print",warkedModule_print,1);
78
+
79
+ /***
80
+ * markedResolution is a structure built to hold two corresponding resolutions in Al and Graal respectively.
81
+ * More precisely, it contains space for:
82
+ * graalBearer Gr a graalBearer containing all relevant global structures
83
+ * ideal idealAl a standard basis of an ideal I in Al
84
+ * resolution resAl a resolution of I over Al
85
+ * resolution resGraal a resolution of inI, the initial ideal of I over Graal
86
+ * list weight a list containing weights on the modules in resAl
87
+ **/
88
+ newstruct("markedResolution","graalBearer Gr, ideal idealAl, resolution resAl, resolution resGraal, list weight");
89
+ system("install","markedResolution","print",markedResolution_print,1);
90
+ }
91
+
92
+ ///////////////////////////////////////////////////////////////////////////////
93
+
94
+
95
+ /***
96
+ * returns the number of Y, each of them corresponding to a generator of J.
97
+ * we assume that the Ys are written in the first non-"c" block of our ordering,
98
+ * for example (Y(1..s),X(1..n)),(c,ds(s),dp(n))
99
+ * or (Y(1..s),X(1..n)),(ds(s),c,dp(n))
100
+ * but not (X(1..n),Y(1..s)),(c,dp(s),ds(n)).
101
+ **/
102
+ static proc numberOfYs()
103
+ {
104
+ list L = ringlist(basering);
105
+ if (L[3][1][1]!="c")
106
+ {
107
+ return(size(ring_list(basering)[3][1][2]));
108
+ }
109
+ else
110
+ {
111
+ return(size(ring_list(basering)[3][2][2]));
112
+ }
113
+ }
114
+
115
+
116
+ static proc yinitial(def F, list #)
117
+ {
118
+ int s;
119
+ if (size(#)>0 && typeof(#[1])=="int")
120
+ { s = #[1]; }
121
+ else
122
+ { s = numberOfYs(); }
123
+ if (typeof(F)=="poly")
124
+ {
125
+ int k = size(F);
126
+ poly inF = F[1];
127
+ intvec expv = leadexp(F);
128
+ int d = sum(intvec(expv[1..s]));
129
+ for (int i=2; i<=k; i++)
130
+ {
131
+ expv = leadexp(F[i]);
132
+ if (sum(intvec(expv[1..s])) == d)
133
+ { inF = inF + F[i]; }
134
+ else
135
+ { break; }
136
+ }
137
+ return(inF);
138
+ }
139
+ if (typeof(F)=="ideal")
140
+ {
141
+ int k = size(F);
142
+ ideal inF = yinitial(F[1]);
143
+ for (int i=2; i<=k; i++)
144
+ { inF[i] = yinitial(F[i],s); }
145
+ return(inF);
146
+ }
147
+ }
148
+
149
+
150
+ /***
151
+ * suppose X(1),...,X(n) are the variables in the ring containing g,
152
+ * checks whether g contains the variables X(1),...,X(n-1).
153
+ **/
154
+ static proc containsVariablesApartFromLast(poly g)
155
+ {
156
+ intvec expv; int d; int s = nvars(basering)-1;
157
+ int i,j;
158
+ for (j=1; j<=size(g); j++)
159
+ {
160
+ expv = leadexp(g[j]);
161
+ for (i=1; i<=s; i++)
162
+ {
163
+ if (expv[i] > 0)
164
+ { return(i); }
165
+ }
166
+ }
167
+ return(0);
168
+ }
169
+
170
+
171
+ /***
172
+ * assuming that the ordering is lexicographical,
173
+ * checks whether m is in general position with respect to it.
174
+ **/
175
+ static proc isInGeneralPosition(ideal m)
176
+ {
177
+ int n = nvars(basering);
178
+ if (n == 1)
179
+ { return(1); }
180
+
181
+ int k = size(m);
182
+ if (k == n)
183
+ {
184
+ m = sort(m)[1]; poly g;
185
+ for (int i=2; i<=k; i++)
186
+ {
187
+ g = m[i];
188
+ if (leadmonom(g)!=var(k-i+1) || containsVariablesApartFromLast(g-lead(g)))
189
+ { return(0); }
190
+ }
191
+ g = m[1];
192
+ if (containsVariablesApartFromLast(g))
193
+ { return(0); }
194
+ return(1);
195
+ }
196
+ return(0);
197
+ }
198
+
199
+
200
+ /***
201
+ * finds a transformation of the last variable
202
+ * which maps m into general position with respect to the lexicographical ordering lp.
203
+ * returns the image of the last variable under the transformation and the image of m.
204
+ **/
205
+ static proc findGeneralPosition(ideal m)
206
+ {
207
+ list L = ringlist(basering);
208
+ int newRing = 0;
209
+ if (L[3][1][1]!="lp" || L[3][1][2]!=nvars(basering))
210
+ {
211
+ def origin = basering;
212
+ ring ringForGeneralPosition = create_ring(ring_list(basering)[1], "("+varstr(basering)+")", "lp", "no_minpoly");
213
+ setring ringForGeneralPosition;
214
+ ideal m = fetch(origin,m);
215
+ newRing = 1;
216
+ }
217
+ ideal mGeneralPosition = std(m);
218
+ int n = nvars(basering); poly p = var(n);
219
+ while (!isInGeneralPosition(mGeneralPosition))
220
+ { // apply generic coordinate change to the last variable,
221
+ // m -> mGeneralPosition, X_n |-> p
222
+ // until mGeneraliPosition is indeed in general position.
223
+ p = randomLast(5)[n];
224
+ mGeneralPosition = subst(m,var(n),p);
225
+ mGeneralPosition = std(mGeneralPosition);
226
+ }
227
+ if (newRing == 1)
228
+ {
229
+ setring origin;
230
+ ideal mGeneralPosition = fetch(ringForGeneralPosition,mGeneralPosition);
231
+ poly p = fetch(ringForGeneralPosition,p);
232
+ }
233
+ return(p,mGeneralPosition);
234
+ }
235
+
236
+
237
+ /***
238
+ * tries for t seconds to find a transformation of the last variable,
239
+ * which maps m into general position with respect to the lexicographical ordering lp.
240
+ * if successful, returns the image of the last variable as well as the image of m.
241
+ * if unsuccessful, returns (0,0) instead.
242
+ **/
243
+ static proc tryFindingGeneralPosition(ideal m, int t)
244
+ {
245
+ def p, mgp;
246
+ p, mgp = watchdog(t,"findGeneralPosition(ideal("+string(m)+"))");
247
+ if (typeof(p)=="string")
248
+ { return(0,0); }
249
+ return(p,mgp);
250
+ }
251
+
252
+
253
+ /***
254
+ * if mgp is in general position with respect to the lexicographical ordering lp,
255
+ * sorts the generators such that their order is
256
+ * X(1) - g(1)
257
+ * X(2) - g(2)
258
+ * ...
259
+ * X(n-1) - g(n-1)
260
+ * g(n),
261
+ * where g(1),...,g(n-1) are polynomials in X(n).
262
+ **/
263
+ static proc sortIdealInGeneralPosition(ideal mgp)
264
+ {
265
+ int k = size(mgp);
266
+ ideal sortedMgp; sortedMgp[k]=0;
267
+ ASSUME(1,size(mgp)==nvars(basering));
268
+ for (int i=1; i<=k; i++)
269
+ {
270
+ poly g = mgp[i];
271
+ int j = containsVariablesApartFromLast(g);
272
+ if (j>0)
273
+ { sortedMgp[j] = g; }
274
+ else
275
+ { sortedMgp[k] = g; }
276
+ kill g;
277
+ kill j;
278
+ }
279
+ return(sortedMgp);
280
+ }
281
+
282
+
283
+ /***
284
+ * if mgp is in general position with respect to the lexicographical ordering lp,
285
+ * and sorted (see above), returns g(1),...,g(n-1).
286
+ **/
287
+ static proc getImagesOfPreviousX(ideal mgp)
288
+ {
289
+ def origin = basering;
290
+ def getImagesRing = changeord(list(list("lp",nvars(basering))));
291
+ setring getImagesRing;
292
+
293
+ ideal mgp = fetch(origin,mgp);
294
+ int k = size(mgp);
295
+ ideal imagesOfPreviousX; imagesOfPreviousX[k]=0;
296
+
297
+ for (int i=1; i<=k; i++)
298
+ {
299
+ poly g = mgp[i];
300
+ ASSUME(1,leadexp(g)[i]==1);
301
+ if (g!=0)
302
+ { g = (lead(g)-g)/leadcoef(g); }
303
+ imagesOfPreviousX[i] = g;
304
+ kill g;
305
+ }
306
+
307
+ setring origin;
308
+ ideal imagesOfPreviousX = fetch(getImagesRing,imagesOfPreviousX);
309
+ return (imagesOfPreviousX);
310
+ }
311
+
312
+
313
+ proc graalMixed(ideal L, list #)
314
+ "
315
+ USAGE: graalMixed(L,t); L ideal, t int (optional)
316
+ RETURN: graalBearer with all the necessary structures for our machinery
317
+ if t specified and t>0, puts an upper time limit
318
+ on finding a necessary transformation to map an intermediate ideal into general position.
319
+ NOTE: assumes that the current basering is a domain and that L is a prime ideal.
320
+ EXAMPLE: example graalMixed; shows an example
321
+ "
322
+ {
323
+ graalBearer Gr;
324
+
325
+ /***
326
+ * store ring A and ideal L
327
+ **/
328
+ Gr.A = basering; Gr.L = L;
329
+ int s = size(L); Gr.s = s;
330
+
331
+ /***
332
+ * construct ring Q and ideals H,J
333
+ **/
334
+ ideal H = ringlist(Gr.A)[4];
335
+ list l3 = ringlist(Gr.A);
336
+ def Q = ring(l3);
337
+ setring Q;
338
+ ideal H = fetch(Gr.A,H); H = sort(std(H))[1];
339
+ ideal J = fetch(Gr.A,L) + H; J = sort(std(J))[1];
340
+ Gr.Q = Q; Gr.H = H; Gr.J = J;
341
+
342
+ /***
343
+ * construct ring Q0 and ideal J0
344
+ **/
345
+ intvec maxIndepSet = indepSet(std(J));
346
+ int trdeg = sum(maxIndepSet);
347
+ int i; int n = nvars(Q);
348
+ if (trdeg > 0)
349
+ {
350
+ string pars = ","; string vars;
351
+ for (i=1; i<=n; i++)
352
+ {
353
+ if (maxIndepSet[i]>0)
354
+ { pars = pars + string(var(i)) + ","; }
355
+ else
356
+ { vars = vars + string(var(i)) + ","; }
357
+ }
358
+ pars = pars[1..size(pars)-1];
359
+ vars = vars[1..size(vars)-1];
360
+ }
361
+ else
362
+ { string pars; string vars = varstr(basering); }
363
+ ring Q0 = create_ring("("+charstr(basering)+pars+")", "("+vars+")", "dp");
364
+ setring Q0;
365
+ ideal J0 = imap(Q,J);
366
+ Gr.Q0 = Q0;
367
+ Gr.J0 = J0;
368
+
369
+ /***
370
+ * push J0 into general position
371
+ **/
372
+ if (size(#)==0)
373
+ {
374
+ poly p; ideal mgp;
375
+ p, mgp = findGeneralPosition(J0);
376
+ }
377
+ else
378
+ {
379
+ if ((#[1]==1) && (typeof(#[1])=="int"))
380
+ {
381
+ polg p; ideal mgp;
382
+ p, mgp = tryFindingGeneralPosition(J0,#[1]);
383
+ if (p == 0)
384
+ {
385
+ ERROR("timeout during computation of minimal polynomial");
386
+ return(Gr);
387
+ }
388
+ }
389
+ else
390
+ {
391
+ ERROR("graal: unexpected optional parameters");
392
+ return(Gr);
393
+ }
394
+ }
395
+ n = nvars(Q0);
396
+ mgp = sortIdealInGeneralPosition(mgp);
397
+ ideal imageOfX = getImagesOfPreviousX(mgp);
398
+ imageOfX[n] = p;
399
+ for (i=1; i<n; i++)
400
+ {
401
+ imageOfX[n] = subst(imageOfX[n],var(i),imageOfX[i]);
402
+ }
403
+ poly g(n) = mgp[n];
404
+
405
+ /***
406
+ * construct Q0y, scriptI and Al
407
+ **/
408
+ string ostring = ordstr(basering);
409
+ ostring = ostring[1..size(ostring)-2];
410
+ list l4;
411
+ for (int zz = 1; zz <= s; zz++)
412
+ {
413
+ l4[zz] = "Y("+string(zz)+")";
414
+ }
415
+ ring Q0y = create_ring(ring_list(basering)[1], "("+string(l4)+","+varstr(basering)+")", "(ds("+string(s)+"),c,"+ostring+")", "no_minpoly");
416
+ setring Q0y;
417
+ ideal H = imap(Gr.A,H);
418
+ ideal J = imap(Gr.A,L);
419
+ ideal scriptI = H;
420
+ for (i=1; i<=s; i++)
421
+ { scriptI = scriptI + poly(J[i]-Y(i)); }
422
+ scriptI = std(scriptI);
423
+ Gr.Q0y = Q0y;
424
+ Gr.scriptI = scriptI;
425
+ ideal inI = yinitial(scriptI,s);
426
+ attrib(inI,"isSB",1);
427
+ qring Al = scriptI;
428
+ Gr.Al = Al;
429
+
430
+ /***
431
+ * construct Ky and sigmainI
432
+ **/
433
+ ring KKy = create_ring(ring_list(Q0)[1], "("+string(l4)+","+varstr(Q0,nvars(Q0))+")", "(c,dp("+string(s)+"),dp(1))", "no_minpoly");
434
+ setring KKy;
435
+ poly minpolyOfK = imap(Q0,g(n));
436
+ qring Ky = std(minpolyOfK);
437
+
438
+ ideal G = Y(1..s); ideal imageOfX = imap(Q0,imageOfX);
439
+ int j1=1;
440
+ for (i=1; i<=nvars(Q); i++)
441
+ {
442
+ if (maxIndepSet[i]==0)
443
+ { G = G, imageOfX[j1]; j1++; }
444
+ // if (maxIndepSet[i]>0)
445
+ // { G = G, par(j2); j2++; }
446
+ // else
447
+ // { G = G, imageOfX[j1]; j1++; }
448
+ }
449
+ map Q0yToKy = Q0y,G;
450
+ Gr.Q0yToKy = Q0yToKy;
451
+ ideal scriptIin = Q0yToKy(inI);
452
+ ASSUME(2,isStandardBasis(scriptIin));
453
+ scriptIin = std(scriptIin);
454
+ Gr.Ky = Ky;
455
+ Gr.scriptIin = scriptIin;
456
+
457
+ /***
458
+ * construct Graal
459
+ **/
460
+ qring Graal = scriptIin;
461
+ Gr.Graal = Graal;
462
+ map in_a = Al,imap(Ky,G);
463
+ Gr.ina = in_a;
464
+
465
+ return(Gr);
466
+ }
467
+ example
468
+ { "EXAMPLE:"; echo = 2;
469
+ // see [Mora] Example 6.5
470
+ ring Q = 0,(x,y,z),dp;
471
+ ideal H = y2-xz;
472
+ qring A = std(H);
473
+ ideal L = x3-yz,x2y-z2;
474
+ graalBearer Gr = graalMixed(L); Gr;
475
+ }
476
+
477
+ /***
478
+ * a print routine for graalBearers,
479
+ * will overwrite the default print routine for newstructs
480
+ **/
481
+ proc graalBearer_print(graalBearer Gr)
482
+ {
483
+ def A=Gr.A; setring A;
484
+ "affine coordinate ring: ";
485
+ " "+string(Gr.A);
486
+ ideal quotientIdeal = ringlist(Gr.A)[4];
487
+ if (quotientIdeal != 0)
488
+ { " mod <"+string(quotientIdeal)+">"; }
489
+ "";
490
+ "ideal defining the subvariety: ";
491
+ " <"+string(Gr.L)+">";"";
492
+ def Al = Gr.Al; setring Al;
493
+ "Al: ";
494
+ " "+string(Gr.Al);
495
+ ideal quotientIdeal = ringlist(basering)[4];
496
+ if (quotientIdeal != 0)
497
+ { " mod <"+string(quotientIdeal)+">"; }
498
+ kill quotientIdeal;
499
+ def Graal = Gr.Graal; setring Graal;
500
+ "graal: ";
501
+ " "+string(Gr.Graal);
502
+ ideal quotientIdeal = ringlist(basering)[4];
503
+ if (quotientIdeal != 0)
504
+ { " mod <"+string(quotientIdeal)+">"; }
505
+ kill quotientIdeal;
506
+ " where ";
507
+ setring Gr.A;
508
+ for (int i=1; i<=Gr.s; i++)
509
+ { " Y("+string(i)+") represents generator "+string(Gr.L[i]); }
510
+ setring Al;
511
+ list L = ringlist(basering);
512
+ int yEnd = size(L[3][1][2]);
513
+ ideal xAll; int n = nvars(basering);
514
+ for (i=1; yEnd+i<=n; i++)
515
+ { xAll[i] = var(yEnd+i); }
516
+ string inaPrint = " and "+string(xAll)+" in Al are mapped to ";
517
+ kill L;
518
+ kill xAll;
519
+ setring Graal;
520
+ map ina = Gr.ina;
521
+ ideal xAllImages;
522
+ for (i=1; yEnd+i<=n; i++)
523
+ { xAllImages[i] = ina[yEnd+i]; }
524
+ inaPrint + string(xAllImages)+" in Graal";
525
+ kill ina;
526
+ kill xAllImages;
527
+ }
528
+
529
+ /***
530
+ * a print routine for warkedModules,
531
+ * will overwrite the default print routine for newstructs
532
+ **/
533
+ proc warkedModule_print(warkedModule wM)
534
+ {
535
+ graalBearer Gr = wM.Gr;
536
+ def Q0y = Gr.Q0y; setring Q0y;
537
+ ideal quotientIdeal = ringlist(basering)[4];
538
+ "module over Q^0[Y] = "+string(basering)+" / <"+string(quotientIdeal)+">:";
539
+ print(matrix(wM.modQ0y));
540
+ "standard basis:";
541
+ print(matrix(wM.stdmodQ0y));
542
+ def Ky = Gr.Ky; setring Ky;
543
+ ideal quotientIdeal = ringlist(basering)[4];
544
+ "module over K[Y] = "+string(basering)+" / <"+string(quotientIdeal)+">:";
545
+ print(matrix(wM.modKy));
546
+ "weights on the unit vectors: "+string(wM.w);
547
+ }
548
+
549
+ /***
550
+ * a print routine for markedModules,
551
+ * will overwrite the default print routine for newstructs
552
+ **/
553
+ proc markedModule_print(markedModule M)
554
+ {
555
+ graalBearer Gr = M.Gr;
556
+ def Ay = Gr.Ky; setring Ay;
557
+ module G = M.G;
558
+ "module over Ay:";
559
+ print(G);
560
+ def Ky = Gr.Graal; setring Ky;
561
+ module H = M.H;
562
+ "module over Ky:";
563
+ print(H);
564
+ }
565
+
566
+
567
+ proc dimensionOfLocalization(def L)
568
+ "
569
+ USAGE: dimensionOfLocalization(L); L ideal or graalBearer
570
+ RETURN: int, the dimension of the localization A_L of A at L.
571
+ EXAMPLE: example dimensionOfLocalization; shows an example
572
+ "
573
+ {
574
+ if (typeof(L)=="ideal")
575
+ {
576
+ graalBearer Gr = graalMixed(L);
577
+ return(dimensionOfLocalization(Gr));
578
+ }
579
+ if (typeof(L)=="graalBearer")
580
+ {
581
+ graalBearer Gr = L;
582
+ def Ky = Gr.Ky; setring Ky;
583
+ ideal scriptIin = Gr.scriptIin;
584
+ return(dim(scriptIin));
585
+ }
586
+ ERROR("dimensionOfLocalization: unexpected parameters");
587
+ return(0);
588
+ }
589
+ example
590
+ {
591
+ "EXAMPLE:"; echo = 2;
592
+ ring Q = 0,(X(1),X(2)),dp;
593
+ ideal H = X(2)^2-(X(1)-1)*X(1)*(X(1)+1);
594
+ ideal J = std(X(1),X(2));
595
+ qring A = std(H);
596
+ ideal L = fetch(Q,J);
597
+ graalBearer Gr = graalMixed(L);
598
+ // def fA = Gr.fA; setring fA;
599
+ dimensionOfLocalization(Gr); // = 1
600
+ }
601
+
602
+ proc systemOfParametersOfLocalization(def L)
603
+ "
604
+ USAGE: systemOfParametersOfLocalization(def L); L ideal or graalBearer
605
+ RETURN: ideal, a system of parameter of the localization A_L of A at L.
606
+ EXAMPLE: example systemOfParameterOfLocalization; shows an example
607
+ "
608
+ {
609
+ if (typeof(L)=="ideal")
610
+ {
611
+ graalBearer Gr = graalMixed(L);
612
+ return(systemOfParametersOfIdealInLocalization(I, Gr));
613
+ }
614
+ if (typeof(L)=="graalBearer")
615
+ {
616
+ graalBearer Gr = L;
617
+ def Ky = Gr.Ky; setring Ky;
618
+ int delta = dimensionOfLocalization(Gr);
619
+ int s = Gr.s;
620
+ int i,j;
621
+ ideal H1 = Gr.scriptIin;
622
+ for (i=1; i<=delta; i++)
623
+ {
624
+ poly lambda(i);
625
+ for (j=1; j<=s; j++)
626
+ {
627
+ int c(i)(j) = random(0,10000);
628
+ lambda(i) = lambda(i) + c(i)(j)*Y(j);
629
+ }
630
+ H1 = H1 + lambda(i);
631
+ }
632
+ H1 = std(H1);
633
+ while (dim(H1) != 0)
634
+ {
635
+ H1 = Gr.scriptIin;
636
+ for (i=1; i<=delta; i++)
637
+ {
638
+ for (j=1; j<=s; j++)
639
+ {
640
+ c(i)(j) = random(0,10000);
641
+ lambda(i) = lambda(i) + c(i)(j)*Y(j);
642
+ }
643
+ H1 = H1 + lambda(i);
644
+ }
645
+ H1 = std(H1);
646
+ }
647
+ def Q = Gr.Q; setring Q;
648
+ ideal J = Gr.J; ideal ret;
649
+ for (i=1; i<=delta; i++)
650
+ {
651
+ poly a(i);
652
+ for (j=1; j<=s; j++)
653
+ { a(i) = a(i)+c(i)(j)*J[i]; }
654
+ ret = ret + a(i);
655
+ }
656
+ def A = Gr.A; setring A;
657
+ return(std(fetch(Q,ret)));
658
+ }
659
+ ERROR("systemOfParametersOfLocalization: unexpected parameters");
660
+ return(0);
661
+ }
662
+ example
663
+ {
664
+ "EXAMPLE:"; echo = 2;
665
+ ring Q = 0,(X(1),X(2)),dp;
666
+ ideal H = X(2)^2-(X(1)-1)*X(1)*(X(1)+1);
667
+ ideal J = X(1),X(2);
668
+ qring A = std(H);
669
+ ideal L = fetch(Q,J);
670
+ graalBearer Gr = graalMixed(L);
671
+ systemOfParametersOfLocalization(Gr); // = 1
672
+ }
673
+
674
+
675
+ /***
676
+ * returns true, if g only contains the last variuable.
677
+ * returns false otherwise.
678
+ **/
679
+ static proc isPolyInLastVariable(poly g)
680
+ {
681
+ int k = size(g);
682
+ int n = nvars(basering);
683
+ for (int i=1; i<=k; i++)
684
+ {
685
+ intvec v = leadexp(g[i]);
686
+ v = v[1..n-1];
687
+ if (sum(v)>0)
688
+ {
689
+ return (0);
690
+ }
691
+ }
692
+ return (1);
693
+ }
694
+
695
+ proc isLocalizationRegular(def L)
696
+ "
697
+ USAGE: isLocalizationRegular(def L); L ideal or graalBearer
698
+ RETURN: int, 1 if the localization A_L of A at L is regular,
699
+ 0 otherwise.
700
+ EXAMPLE: example isLocalizationRegular; shows an example
701
+ "
702
+ {
703
+ if (typeof(L)=="ideal")
704
+ {
705
+ graalBearer Gr = graalMixed(L);
706
+ return(isLocalizationRegular(Gr));
707
+ }
708
+ if (typeof(L)=="graalBearer")
709
+ {
710
+ graalBearer Gr = L;
711
+ def Ky = Gr.Ky; setring Ky;
712
+ ideal sscriptIin = Gr.scriptIin;
713
+ option(redSB);
714
+ sscriptIin = std(sscriptIin);
715
+ option(noredSB);
716
+ int i,j; poly gi; intvec expv;
717
+ int s = Gr.s;
718
+ for (i=1; i<=size(sscriptIin); i++)
719
+ {
720
+ gi = sscriptIin[i];
721
+ if (!isPolyInLastVariable(gi))
722
+ {
723
+ for (j=1; j<=size(gi); j++)
724
+ {
725
+ expv = leadexp(gi[i]);
726
+ if (sum(intvec(expv[1..s])) != 1)
727
+ { return(0); }
728
+ }
729
+ }
730
+ }
731
+ return(1);
732
+ }
733
+ ERROR("isLocalizationRegular: unexpected parameters");
734
+ return(0);
735
+ }
736
+ example
737
+ {
738
+ "EXAMPLE:"; echo = 2;
739
+ ring Q = 0,(X(1),X(2)),dp;
740
+ ideal H = X(2)^2-(X(1)-1)*X(1)*(X(1)+1);
741
+ ideal J = X(1),X(2);
742
+ qring A = std(H);
743
+ ideal L = fetch(Q,J);
744
+ graalBearer Gr = graalMixed(L);
745
+ isLocalizationRegular(Gr); // = 1
746
+ }
747
+
748
+
749
+ /***
750
+ * returns the degree in Y
751
+ **/
752
+ static proc yDeg(poly g, list #)
753
+ {
754
+ int s;
755
+ if (size(#)>0 && typeof(#[1])=="int")
756
+ { s = #[1]; }
757
+ else
758
+ { s = numberOfYs(); }
759
+
760
+ intvec v = leadexp(g);
761
+ int d = 0;
762
+ for (int i=1; i<=s; i++)
763
+ { d = d+v[i]; }
764
+ return (d);
765
+ }
766
+
767
+
768
+ /***
769
+ * normalizes g such that LT_>(g)=Y^\alpha for some \alpha\in\NN^n.
770
+ **/
771
+ static proc normalizeInY(vector g, graalBearer Gr, list #)
772
+ {
773
+ def origin = basering;
774
+ int s;
775
+ if (size(#)>0 && typeof(#[1])=="int")
776
+ { s = #[1]; }
777
+ else
778
+ { s = numberOfYs(); }
779
+
780
+ // get the coefficient before Y in the leading term
781
+ // first isolate the first non-zero component and computes its degree in Y
782
+ poly cg;
783
+ for (int i = 1; i<=nrows(g); i++)
784
+ {
785
+ if (g[i]!=0)
786
+ {
787
+ cg = g[i];
788
+ break;
789
+ }
790
+ }
791
+ int d = yDeg(cg,s);
792
+ // next, sum all terms with the same degree in Y
793
+ poly c = cg[1];
794
+ for (i = 2; i<=size(g); i++)
795
+ {
796
+ if (yDeg(cg[i],s)==d)
797
+ { c = c+cg[i]; }
798
+ }
799
+ // and substitute all Y with 1
800
+ for (i=1; i<=s; i++)
801
+ { c = subst(c,var(i),1); }
802
+
803
+ def Q0 = Gr.Q0;
804
+ setring Q0;
805
+ ideal J0 = Gr.J0;
806
+ ideal J0withC = imap(origin,c), J0;
807
+ list L = division(1,J0withC);
808
+
809
+ ASSUME(1,L[2]==0);
810
+ poly a = L[1][1,1];
811
+
812
+ kill J0;
813
+ kill J0withC;
814
+ kill L;
815
+ setring origin;
816
+ poly a = imap(Q0,a);
817
+
818
+ ideal scriptI = Gr.scriptI;
819
+ g = reduce(a*g,scriptI);
820
+
821
+ return (a,g);
822
+ }
823
+
824
+
825
+ /***
826
+ * removes all zero columns in matrix(G),
827
+ * and removes the corresponding columns in Q, if they exist.
828
+ **/
829
+ static proc removeZeroColumns(module G, matrix Q)
830
+ {
831
+ ASSUME(1,ncols(G)>ncols(Q));
832
+ module Gprime;
833
+ matrix Qprime[nrows(Q)][ncols(Q)];
834
+ int newSizeG = 0;
835
+ int newSizeQ = 0;
836
+
837
+ for (int i=1; i<=ncols(G); i++)
838
+ {
839
+ if (G[i]!=0)
840
+ {
841
+ newSizeG++;
842
+ Gprime[newSizeG] = G[i];
843
+ if (i<=ncols(Q))
844
+ {
845
+ newSizeQ++;
846
+ Qprime[1..nrows(Q),newSizeQ] = Q[1..nrows(Q),i];
847
+ }
848
+ }
849
+ }
850
+ matrix QQprime[nrows(Q)][newSizeQ] = Qprime[1..nrows(Q),1..newSizeQ];
851
+ return (Gprime,QQprime);
852
+ }
853
+
854
+
855
+ proc warkedPreimageStd(warkedModule wM)
856
+ "
857
+ USAGE: warkedPreimageStd(wM); M warkedModule
858
+ RETURN: given wM consisting of:
859
+ - wM.Gr a graalBearer containing all relevant global structures
860
+ - wM.modQ0y generating set G of a module M over Q0y
861
+ - wM.stdmodQ0y empty
862
+ - wM.qQ0y empty
863
+ - wM.modKy corresponding generating set H of M_in over Ky
864
+ - wM.stdmodKy empty
865
+ - wM.qKy empty
866
+ - wM.w weights on M
867
+ returns the same warkedModule, except following differences:
868
+ - wM.stdmodQ0y contains a subset G such that for any standard basis L of the kernel
869
+ G + L is a standard basis of modQ0y + kernel
870
+ - wM.qQ0y contains a transformation matrix such that
871
+ stdmodAy = QAy*modQ0y
872
+ - wM.stdmodKy contains a standardbasis of modKy
873
+ - wM.qKy contains a transformation matrix such that
874
+ stdmodKy = QKy*modKy
875
+ NOTE: the standard basis of modAy is computed by lifting a corresponding
876
+ Groebner basis of modKy
877
+ EXAMPLE: example warkedPreimageStd; shows an example
878
+ "
879
+ {
880
+ ASSUME(1,checkCorrespondence(wM));
881
+
882
+ graalBearer Gr = wM.Gr;
883
+ // intvec w = wM.w;
884
+
885
+ def Ky = Gr.Ky; setring Ky;
886
+ module H = wM.modKy;
887
+
888
+ /* add generators of the kernel to H */
889
+ int l = ncols(H);
890
+ int k = nrows(H);
891
+ int i,j;
892
+ ideal scriptIin = Gr.scriptIin;
893
+ H = H+freemodule(k)*scriptIin;
894
+
895
+ /* compute a standard basis of H
896
+ * and a corresponding transformation matrix */
897
+ matrix Qdash;
898
+ module Hdash = liftstd(H,Qdash);
899
+
900
+ /* drop factors before elements of scriptIin
901
+ * and single out all elements of Hdash
902
+ * whose leading monomial does not lie in scriptIin */
903
+ matrix QQ[l][size(Hdash)];
904
+ int ncolsQQ = 0;
905
+ module redLHdash = reduce(lead(Hdash),lead(scriptIin));
906
+ for (i=1; i<=size(Hdash); i++)
907
+ {
908
+ if (redLHdash[i] != 0)
909
+ {
910
+ ncolsQQ++;
911
+ QQ[1..l,ncolsQQ] = Qdash[1..l,i];
912
+ }
913
+ }
914
+ matrix Q[l][ncolsQQ] = QQ[1..l,1..ncolsQQ];
915
+ wM.qKy = Q;
916
+ wM.stdmodKy = Hdash;
917
+
918
+ def Q0y = Gr.Q0y; setring Q0y;
919
+ module G = wM.modQ0y;
920
+ matrix Q = imap(Ky,Q);
921
+ ideal scriptI = Gr.scriptI;
922
+ module Gdash = reduce(matrix(G)*Q,scriptI);
923
+ poly a;
924
+ for (i=1; i<=size(Gdash); i++)
925
+ {
926
+ a,Gdash[i] = normalizeInY(Gdash[i],Gr);
927
+ Q[1..l,i] = a*Q[1..l,i];
928
+ }
929
+ ASSUME(1,isStandardBases(Gdash));
930
+ Gdash = Gdash + freemodule(k)*scriptI;
931
+
932
+ Gdash = simplify(Gdash,32);
933
+ Gdash,Q = removeZeroColumns(Gdash,Q);
934
+
935
+
936
+ wM.qQ0y = Q;
937
+ wM.stdmodQ0y = Gdash;
938
+
939
+ return(wM);
940
+ }
941
+ example
942
+ { "EXAMPLE:"; echo = 2;
943
+ ring Q = 0,(x,y,z),dp;
944
+ ideal H = y2-xz;
945
+ qring A = std(H);
946
+ ideal L = x3-yz,x2y-z2;
947
+ graalBearer Gr = graalMixed(L);
948
+ def Q0y = Gr.Q0y; setring Q0y;
949
+
950
+ module M = (Y(1)*y+y^2-1)*gen(1)+(Y(2)*z+z^2-1)*gen(2), Y(1)*y*gen(1)+Y(2)*z*gen(2);
951
+ /* This is M: */
952
+ print(matrix(M));
953
+ intvec w = 1,1,1;
954
+ warkedModule wM;
955
+ wM.Gr = Gr;
956
+ wM.modQ0y = M;
957
+ wM.w = w;
958
+
959
+ def Ky = Gr.Ky; setring Ky;
960
+ module Min = (y^2-1)*gen(1)+(z^2-1)*gen(2),Y(1)*y*gen(1)+Y(2)*z*gen(2);
961
+ /* This is M_in: */
962
+ print(matrix(Min));
963
+ wM.modKy = Min;
964
+
965
+ /* warkedPreimageStd yields the same standard basis as std: */
966
+ warkedModule wN = warkedPreimageStd(wM); wN;
967
+ setring Q0y;
968
+ module stdM = std(M);
969
+ print(matrix(stdM));
970
+ }
971
+
972
+ proc markedResolution_print(markedResolution mr)
973
+ {
974
+ graalBearer Gr = mr.Gr;
975
+
976
+ "resolution over Al:";
977
+ def Al = Gr.Al; setring Al;
978
+ resolution resAl = mr.resAl;
979
+ resAl;
980
+ for (int i=1; i<=ressize(resAl); i++)
981
+ {
982
+ "k="+string(i);
983
+ print(module(resAl[i]));
984
+ "";
985
+ }
986
+
987
+ "resolution over Graal:";
988
+ def Graal = Gr.Graal; setring Graal;
989
+ resolution resGraal = mr.resGraal;
990
+ resGraal;
991
+ for (i=1; i<=ressize(resGraal); i++)
992
+ {
993
+ "k="+string(i);
994
+ print(module(resGraal[i]));
995
+ "";
996
+ }
997
+ }
998
+
999
+
1000
+ /***
1001
+ * returns the size of a resolution.
1002
+ **/
1003
+ static proc ressize(resolution res)
1004
+ {
1005
+ for (int i=1; i<=size(res); i++)
1006
+ {
1007
+ if (res[i]==0)
1008
+ {
1009
+ return (i-1);
1010
+ }
1011
+ }
1012
+ return (size(res));
1013
+ }
1014
+
1015
+
1016
+ /***
1017
+ * given rh consisting of:
1018
+ * - rh.Gr a graalBearer containing all relevant global structures
1019
+ * - rh.idealAl a standard basis of an ideal I in Al
1020
+ * - rh.resAl a resolution with only a single entry,
1021
+ * generators of I corresponding to the generators of inI
1022
+ * - rh.resGraal a resolution of inI, the initial ideal inI of I over Graal
1023
+ * - rh.weights an empty list of weights for the modules in resAl
1024
+ * liftRes lifts the given resolution of inI to a resolution of I
1025
+ **/
1026
+ static proc liftRes(markedResolution rh)
1027
+ {
1028
+ graalBearer Gr = rh.Gr;
1029
+
1030
+ /* before anything initiate a list with the generators of I
1031
+ for the resolution over Al
1032
+ and read out the resolution over Graal */
1033
+ def Al = Gr.Al; setring Al;
1034
+ ideal I = rh.idealAl;
1035
+ list resAl = I;
1036
+
1037
+ def Graal = Gr.Graal; setring Graal;
1038
+ resolution resGraal = rh.resGraal;
1039
+ int k = ressize(resGraal);
1040
+ ideal inI = resGraal[1];
1041
+
1042
+ /* before lifting the first segment of the resolution,
1043
+ find suitable preimages of the generators of I and inI */
1044
+ int i = 1;
1045
+ def Ky = Gr.Ky; setring Ky;
1046
+ ideal scriptIin = Gr.scriptIin;
1047
+ ASSUME(1,reduce(std(scriptIin),scriptIin)==0); // check whether it is standard basis
1048
+ attrib(scriptIin,"isSB",1); // and set corresponding flag to 1
1049
+ ideal H(i) = imap(Graal,inI);
1050
+ ASSUME(1,lead(H(i))==lead(reduce(H(i),scriptIin))); // H(i) should already be in reduced form,
1051
+ // since inI was a standard basis
1052
+
1053
+ def Q0y = Gr.Q0y; setring Q0y;
1054
+ ideal scriptI = Gr.scriptI;
1055
+ ASSUME(1,reduce(std(scriptI),scriptI)==0); // check whether it is standard basis
1056
+ attrib(scriptI,"isSB",1); // and set corresponding flag to 1
1057
+ ideal G(i) = imap(Al,I);
1058
+ ASSUME(1,lead(G(i))==lead(reduce(G(i),scriptI))); // G(i) should already be in reduced form,
1059
+ // since I was a standard basis
1060
+
1061
+ /* lifting the first segment of the resolution,
1062
+ * i.e. syzygies of the generators Theta of inI to
1063
+ * syzygies of the generators Delta of I */
1064
+
1065
+ /* note that I already is already in standard bases form,
1066
+ * which is why G(i)+scriptI is a standard bases */
1067
+ /* next, we need a standard basis of the preimage of I */
1068
+ setring Q0y;
1069
+ ideal Gdash(i) = G(i) + scriptI;
1070
+ ASSUME(2,isStandardBasis(Gdash(i)));
1071
+ attrib(Gdash(i),"isSB",1);
1072
+ matrix Q(i)[size(G(i))][size(Gdash(i))];
1073
+ for (int j=1; j<=size(G(i)); j++)
1074
+ { Q(i)[j,j]=1; }
1075
+
1076
+ for (i=2; i<=k; i++)
1077
+ {
1078
+ setring Graal;
1079
+ module syzTheta = resGraal[i];
1080
+
1081
+ // pick homogeneous representatives of hs eta in syzTheta
1082
+ setring Ky;
1083
+ module H(i) = imap(Graal,syzTheta);
1084
+ H(i) = reduce(H(i),scriptIin);
1085
+
1086
+ // lift them to gs in Q0y, substitute elements of G for the unit vectors
1087
+ // and reduce the result
1088
+ setring Q0y;
1089
+ module G(i) = imap(Ky,H(i));
1090
+ module R = matrix(G(i-1))*matrix(G(i));
1091
+ R = reduce(R,scriptI);
1092
+
1093
+ // compute a standard representation of the remainder
1094
+ // with respect to G'
1095
+ list L = division(R,Gdash(i-1));
1096
+ matrix D = L[1];
1097
+ ASSUME(1,L[2]==0);
1098
+ ASSUME(1,isDiagonalMatrixOfOnes(L[3]));
1099
+
1100
+ // correct the gs by our result
1101
+ matrix QD = Q(i-1)*D;
1102
+ G(i) = module(matrix(G(i))-QD);
1103
+ setring Al;
1104
+ resAl[i] = imap(Q0y,G(i));
1105
+
1106
+ // extend it to standard basis GDash(i)
1107
+ // and transformation matrix for next step
1108
+ warkedModule wM;
1109
+ wM.Gr = Gr;
1110
+
1111
+ setring Ky;
1112
+ wM.modKy = H(i);
1113
+
1114
+ setring Q0y;
1115
+ wM.modQ0y = G(i);
1116
+
1117
+ wM = warkedPreimageStd(wM);
1118
+ matrix Q(i) = wM.qQ0y;
1119
+ module Gdash(i) = wM.modQ0y;
1120
+
1121
+ // cleanup
1122
+ setring Graal;
1123
+ kill syzTheta;
1124
+ setring Q0y;
1125
+ kill R;
1126
+ kill L;
1127
+ kill D;
1128
+ kill QD;
1129
+ }
1130
+
1131
+ setring Al;
1132
+ rh.resAl = resolution(resAl);
1133
+ return(rh);
1134
+ }
1135
+
1136
+
1137
+ /***
1138
+ * Given two ideals with the same generators modulo ordering
1139
+ * returns an intvec that represents a permutation of the generators
1140
+ **/
1141
+ static proc getPermutation(ideal I1, ideal I2)
1142
+ {
1143
+ ASSUME(1,size(I1)==size(I2));
1144
+ int i,j;
1145
+ intvec perm;
1146
+ for (i=1; i<=size(I1); i++)
1147
+ {
1148
+ for (j=1; j<=size(I2); j++)
1149
+ {
1150
+ if (I1[i]==I2[j])
1151
+ {
1152
+ perm[i] = j;
1153
+ }
1154
+ }
1155
+ }
1156
+ for (i=1; i<=size(perm); i++)
1157
+ {
1158
+ ASSUME(1,perm[i]>0);
1159
+ }
1160
+ return(perm);
1161
+ }
1162
+
1163
+
1164
+ /***
1165
+ * Given an intvec representing a permutation,
1166
+ * permutes the generators of the ideal.
1167
+ **/
1168
+ static proc permuteGenerators(ideal I, intvec perm)
1169
+ {
1170
+ ASSUME(1,size(I)==size(perm));
1171
+ ideal J;
1172
+ for (int i=1; i<=size(perm); i++)
1173
+ {
1174
+ J[i]=I[perm[i]];
1175
+ }
1176
+ return (J);
1177
+ }
1178
+
1179
+
1180
+ proc resolutionInLocalization(ideal I, def L)
1181
+ "
1182
+ USAGE: resolutionInLocalization(I,L); I ideal, L ideal or graalBearer
1183
+ RETURN: the resolution of I*A_L, where
1184
+ A_L is the localization of the current basering (possibly a quotient ring)
1185
+ at a prime ideal L.
1186
+ EXAMPLE: example resolutionInLocalization; shows an example
1187
+ "
1188
+ {
1189
+ if (typeof(L)=="ideal")
1190
+ {
1191
+ graalBearer Gr = graalMixed(L);
1192
+ return(resolutionInLocalization(I,Gr));
1193
+ }
1194
+ if (typeof(L)=="graalBearer")
1195
+ {
1196
+ graalBearer Gr = L;
1197
+ def origin = basering;
1198
+ def Al = Gr.Al; setring Al;
1199
+ ideal I = imap(origin,I);
1200
+ I = std(I);
1201
+ int s = Gr.s;
1202
+ markedResolution mr;
1203
+ mr.idealAl = I;
1204
+ ideal inI = yinitial(I,s);
1205
+ def Graal = Gr.Graal;
1206
+ setring Graal;
1207
+ ideal inI = Gr.ina(inI);
1208
+ ASSUME(1,isStandardBasis(inI));
1209
+ attrib(inI,"isSB",1);
1210
+ resolution resInI = res(inI,0);
1211
+ resInI = minres(resInI);
1212
+ mr.Gr = Gr;
1213
+ mr.resGraal = resInI;
1214
+ ideal inJ = resInI[1];
1215
+ intvec perm = getPermutation(inI,inJ);
1216
+ setring Al;
1217
+ mr.idealAl = permuteGenerators(I,perm);
1218
+ mr = liftRes(mr);
1219
+ return(mr);
1220
+ }
1221
+ ERROR("resolutionInLocalization: unexpected parameters");
1222
+ return(0);
1223
+ }
1224
+ example
1225
+ { "EXAMPLE:"; echo = 2;
1226
+ ring Q = 0,(x,y,z,w),dp;
1227
+ ideal circle = (x-1)^2+y^2-3,z;
1228
+ ideal twistedCubic = xz-y2,yw-z2,xw-yz,z;
1229
+ ideal I = std(intersect(circle,twistedCubic));
1230
+
1231
+ // the resolution is more complicated due to the twisted cubic
1232
+ res(I,0);
1233
+
1234
+ // however if we localize outside of the twisted cubic,
1235
+ // it should become very easy again.
1236
+ ideal L = std(I+ideal(x-1));
1237
+ graalBearer Gr = graalMixed(L); Gr;
1238
+ markedResolution mr = resolutionInLocalization(I,Gr);
1239
+ mr;
1240
+ }
1241
+
1242
+
1243
+ /***
1244
+ * debug code
1245
+ **/
1246
+ static proc isConstantUnit(poly p)
1247
+ {
1248
+ return(cleardenom(p)==1);
1249
+ }
1250
+ static proc isConstantMultiple(vector v, vector w)
1251
+ {
1252
+ module M = v,w;
1253
+ M = simplify(M,8);
1254
+ if (M[2]!=0)
1255
+ { return(0); }
1256
+ return(1);
1257
+ }
1258
+ static proc checkColumnsUpToUnits(matrix M, matrix N)
1259
+ {
1260
+ if ((ncols(M)!=ncols(N)) && (nrows(M)!=nrows(N)))
1261
+ { return(0); }
1262
+ if (nrows(M)==0)
1263
+ { return(1); }
1264
+ int i,j;
1265
+ vector v,w;
1266
+ poly p,q;
1267
+ for (i=ncols(M); i>0; i--)
1268
+ {
1269
+ v = M[i];
1270
+ w = N[i];
1271
+ if (!isConstantMultiple(v,w))
1272
+ { return(0); }
1273
+ }
1274
+ return(1);
1275
+ }
1276
+ /***
1277
+ * returns 1, if wM.modAy and wM.modKy correspond to each other
1278
+ * and wm.stdmodAy and wm.stdmodKy correspond to each other.
1279
+ * returns 0 otherwise.
1280
+ **/
1281
+ static proc checkCorrespondence(warkedModule wM)
1282
+ {
1283
+ return (1);
1284
+ graalBearer Gr = wM.Gr;
1285
+ intvec w = wM.w;
1286
+ def Ky = Gr.Ky;
1287
+ setring Ky;
1288
+ map Q0yToKy = Gr.Q0yToKy;
1289
+ def Q0y = Gr.Q0y;
1290
+ setring Q0y;
1291
+
1292
+ module G1 = wM.modQ0y;
1293
+ if (G1 != 0)
1294
+ {
1295
+ G1 = vectorInitial(G1,w);
1296
+ setring Ky;
1297
+ module H10 = wM.modKy;
1298
+ if (H10 != 0)
1299
+ {
1300
+ module H11 = Q0yToKy(G1);
1301
+ if (matrix(H10)!=matrix(H11))
1302
+ { return(0); }
1303
+ }
1304
+ setring Q0y;
1305
+ }
1306
+
1307
+ module G2 = wM.stdmodQ0y;
1308
+ if (G2 != 0)
1309
+ {
1310
+ G2 = vectorInitial(G2,w);
1311
+ setring Ky;
1312
+ module H20 = wM.stdmodKy;
1313
+ if (H20 != 0)
1314
+ {
1315
+ module H21 = Q0yToKy(G2);
1316
+ if (matrix(H20)!=matrix(H21))
1317
+ { return(0); }
1318
+ }
1319
+ }
1320
+
1321
+ return(1);
1322
+ }
1323
+ /***
1324
+ * checks whether U is a diagonal matrix consisting of 1's
1325
+ **/
1326
+ static proc isDiagonalMatrixOfOnes(matrix U)
1327
+ {
1328
+ if (nrows(U)!=ncols(U))
1329
+ { return(0); }
1330
+ int j,j;
1331
+ for (i=1; i<=nrows(U); i++)
1332
+ {
1333
+ for (j=1; j<=ncols(U); j++)
1334
+ {
1335
+ if (i==j && U[i,j]!=number(1))
1336
+ { return(0); }
1337
+ if (i!=j && U[i,j]!=number(0))
1338
+ { return(0); }
1339
+ }
1340
+ }
1341
+ return(1);
1342
+ }
1343
+ /***
1344
+ * returns 1 if I is a standard basis, returns 0 otherwise,
1345
+ **/
1346
+ static proc isStandardBasis(ideal I)
1347
+ {
1348
+ ideal LI = lead(std(I));
1349
+ attrib(LI,"isSB",1);
1350
+ ideal LII = lead(I);
1351
+ attrib(LII,"isSB",1);
1352
+ /* checks whether lead(I) generates the leading ideal */
1353
+ if (simplify(reduce(LI,LII),2)!=0)
1354
+ {
1355
+ ERROR("isStandardBasis: input ideal no standard basis!");
1356
+ return(0);
1357
+ }
1358
+ /* the following case should never happen mathematically,
1359
+ * left the check for sake of completeness */
1360
+ if (simplify(reduce(LII,LI),2)!=0)
1361
+ {
1362
+ ERROR("isStandardBasis: input ideal no standard basis!");
1363
+ return(0);
1364
+ }
1365
+ return(1);
1366
+ }