passagemath-singular 10.6.31rc3__cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.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 (490) hide show
  1. PySingular.cpython-314-aarch64-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 +490 -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-6a2a8666.4.1.so +0 -0
  7. passagemath_singular.libs/libcddgmp-ac579979.so.0.1.3 +0 -0
  8. passagemath_singular.libs/libfactory-4-66e33516.4.1.so +0 -0
  9. passagemath_singular.libs/libflint-81de1160.so.21.0.0 +0 -0
  10. passagemath_singular.libs/libgf2x-fbd36f80.so.3.0.0 +0 -0
  11. passagemath_singular.libs/libgfortran-e1b7dfc8.so.5.0.0 +0 -0
  12. passagemath_singular.libs/libgmp-93ebf16a.so.10.5.0 +0 -0
  13. passagemath_singular.libs/libgsl-e3525837.so.28.0.0 +0 -0
  14. passagemath_singular.libs/libmpfr-e0f11cf3.so.6.2.1 +0 -0
  15. passagemath_singular.libs/libntl-0043a3a2.so.44.0.1 +0 -0
  16. passagemath_singular.libs/libomalloc-0-06512335.9.6.so +0 -0
  17. passagemath_singular.libs/libopenblasp-r0-4c5b64b1.3.29.so +0 -0
  18. passagemath_singular.libs/libpolys-4-cb7246b5.4.1.so +0 -0
  19. passagemath_singular.libs/libreadline-28330744.so.8.2 +0 -0
  20. passagemath_singular.libs/libsingular_resources-4-8c425241.4.1.so +0 -0
  21. passagemath_singular.libs/libtinfo-f81c2d16.so.6.3 +0 -0
  22. sage/algebras/all__sagemath_singular.py +3 -0
  23. sage/algebras/fusion_rings/all.py +19 -0
  24. sage/algebras/fusion_rings/f_matrix.py +2448 -0
  25. sage/algebras/fusion_rings/fast_parallel_fmats_methods.cpython-314-aarch64-linux-gnu.so +0 -0
  26. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd +5 -0
  27. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx +538 -0
  28. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.cpython-314-aarch64-linux-gnu.so +0 -0
  29. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd +3 -0
  30. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx +331 -0
  31. sage/algebras/fusion_rings/fusion_double.py +899 -0
  32. sage/algebras/fusion_rings/fusion_ring.py +1580 -0
  33. sage/algebras/fusion_rings/poly_tup_engine.cpython-314-aarch64-linux-gnu.so +0 -0
  34. sage/algebras/fusion_rings/poly_tup_engine.pxd +24 -0
  35. sage/algebras/fusion_rings/poly_tup_engine.pyx +579 -0
  36. sage/algebras/fusion_rings/shm_managers.cpython-314-aarch64-linux-gnu.so +0 -0
  37. sage/algebras/fusion_rings/shm_managers.pxd +24 -0
  38. sage/algebras/fusion_rings/shm_managers.pyx +780 -0
  39. sage/algebras/letterplace/all.py +1 -0
  40. sage/algebras/letterplace/free_algebra_element_letterplace.cpython-314-aarch64-linux-gnu.so +0 -0
  41. sage/algebras/letterplace/free_algebra_element_letterplace.pxd +18 -0
  42. sage/algebras/letterplace/free_algebra_element_letterplace.pyx +755 -0
  43. sage/algebras/letterplace/free_algebra_letterplace.cpython-314-aarch64-linux-gnu.so +0 -0
  44. sage/algebras/letterplace/free_algebra_letterplace.pxd +35 -0
  45. sage/algebras/letterplace/free_algebra_letterplace.pyx +914 -0
  46. sage/algebras/letterplace/letterplace_ideal.cpython-314-aarch64-linux-gnu.so +0 -0
  47. sage/algebras/letterplace/letterplace_ideal.pyx +408 -0
  48. sage/algebras/quatalg/all.py +2 -0
  49. sage/algebras/quatalg/quaternion_algebra.py +4778 -0
  50. sage/algebras/quatalg/quaternion_algebra_cython.cpython-314-aarch64-linux-gnu.so +0 -0
  51. sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
  52. sage/algebras/quatalg/quaternion_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  53. sage/algebras/quatalg/quaternion_algebra_element.pxd +29 -0
  54. sage/algebras/quatalg/quaternion_algebra_element.pyx +2176 -0
  55. sage/all__sagemath_singular.py +11 -0
  56. sage/ext_data/all__sagemath_singular.py +1 -0
  57. sage/ext_data/singular/function_field/core.lib +98 -0
  58. sage/interfaces/all__sagemath_singular.py +1 -0
  59. sage/interfaces/singular.py +2835 -0
  60. sage/libs/all__sagemath_singular.py +1 -0
  61. sage/libs/singular/__init__.py +1 -0
  62. sage/libs/singular/decl.pxd +1168 -0
  63. sage/libs/singular/function.cpython-314-aarch64-linux-gnu.so +0 -0
  64. sage/libs/singular/function.pxd +87 -0
  65. sage/libs/singular/function.pyx +1901 -0
  66. sage/libs/singular/function_factory.py +61 -0
  67. sage/libs/singular/groebner_strategy.cpython-314-aarch64-linux-gnu.so +0 -0
  68. sage/libs/singular/groebner_strategy.pxd +22 -0
  69. sage/libs/singular/groebner_strategy.pyx +582 -0
  70. sage/libs/singular/option.cpython-314-aarch64-linux-gnu.so +0 -0
  71. sage/libs/singular/option.pyx +671 -0
  72. sage/libs/singular/polynomial.cpython-314-aarch64-linux-gnu.so +0 -0
  73. sage/libs/singular/polynomial.pxd +39 -0
  74. sage/libs/singular/polynomial.pyx +661 -0
  75. sage/libs/singular/ring.cpython-314-aarch64-linux-gnu.so +0 -0
  76. sage/libs/singular/ring.pxd +58 -0
  77. sage/libs/singular/ring.pyx +893 -0
  78. sage/libs/singular/singular.cpython-314-aarch64-linux-gnu.so +0 -0
  79. sage/libs/singular/singular.pxd +72 -0
  80. sage/libs/singular/singular.pyx +1944 -0
  81. sage/libs/singular/standard_options.py +145 -0
  82. sage/matrix/all__sagemath_singular.py +1 -0
  83. sage/matrix/matrix_mpolynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  84. sage/matrix/matrix_mpolynomial_dense.pxd +7 -0
  85. sage/matrix/matrix_mpolynomial_dense.pyx +615 -0
  86. sage/rings/all__sagemath_singular.py +1 -0
  87. sage/rings/function_field/all__sagemath_singular.py +1 -0
  88. sage/rings/function_field/derivations_polymod.py +911 -0
  89. sage/rings/function_field/element_polymod.cpython-314-aarch64-linux-gnu.so +0 -0
  90. sage/rings/function_field/element_polymod.pyx +406 -0
  91. sage/rings/function_field/function_field_polymod.py +2611 -0
  92. sage/rings/function_field/ideal_polymod.py +1775 -0
  93. sage/rings/function_field/order_polymod.py +1475 -0
  94. sage/rings/function_field/place_polymod.py +681 -0
  95. sage/rings/polynomial/all__sagemath_singular.py +1 -0
  96. sage/rings/polynomial/multi_polynomial_ideal_libsingular.cpython-314-aarch64-linux-gnu.so +0 -0
  97. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd +5 -0
  98. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx +339 -0
  99. sage/rings/polynomial/multi_polynomial_libsingular.cpython-314-aarch64-linux-gnu.so +0 -0
  100. sage/rings/polynomial/multi_polynomial_libsingular.pxd +30 -0
  101. sage/rings/polynomial/multi_polynomial_libsingular.pyx +6277 -0
  102. sage/rings/polynomial/plural.cpython-314-aarch64-linux-gnu.so +0 -0
  103. sage/rings/polynomial/plural.pxd +48 -0
  104. sage/rings/polynomial/plural.pyx +3171 -0
  105. sage/symbolic/all__sagemath_singular.py +1 -0
  106. sage/symbolic/comparison_impl.pxi +428 -0
  107. sage/symbolic/constants_c_impl.pxi +178 -0
  108. sage/symbolic/expression.cpython-314-aarch64-linux-gnu.so +0 -0
  109. sage/symbolic/expression.pxd +7 -0
  110. sage/symbolic/expression.pyx +14200 -0
  111. sage/symbolic/getitem_impl.pxi +202 -0
  112. sage/symbolic/pynac.pxi +572 -0
  113. sage/symbolic/pynac_constant_impl.pxi +133 -0
  114. sage/symbolic/pynac_function_impl.pxi +206 -0
  115. sage/symbolic/pynac_impl.pxi +2576 -0
  116. sage/symbolic/pynac_wrap.h +124 -0
  117. sage/symbolic/series_impl.pxi +272 -0
  118. sage/symbolic/substitution_map_impl.pxi +94 -0
  119. sage_wheels/bin/ESingular +0 -0
  120. sage_wheels/bin/Singular +0 -0
  121. sage_wheels/bin/TSingular +0 -0
  122. sage_wheels/lib/singular/MOD/cohomo.la +41 -0
  123. sage_wheels/lib/singular/MOD/cohomo.so +0 -0
  124. sage_wheels/lib/singular/MOD/customstd.la +41 -0
  125. sage_wheels/lib/singular/MOD/customstd.so +0 -0
  126. sage_wheels/lib/singular/MOD/freealgebra.la +41 -0
  127. sage_wheels/lib/singular/MOD/freealgebra.so +0 -0
  128. sage_wheels/lib/singular/MOD/gfanlib.la +41 -0
  129. sage_wheels/lib/singular/MOD/gfanlib.so +0 -0
  130. sage_wheels/lib/singular/MOD/gitfan.la +41 -0
  131. sage_wheels/lib/singular/MOD/gitfan.so +0 -0
  132. sage_wheels/lib/singular/MOD/interval.la +41 -0
  133. sage_wheels/lib/singular/MOD/interval.so +0 -0
  134. sage_wheels/lib/singular/MOD/loctriv.la +41 -0
  135. sage_wheels/lib/singular/MOD/loctriv.so +0 -0
  136. sage_wheels/lib/singular/MOD/machinelearning.la +41 -0
  137. sage_wheels/lib/singular/MOD/machinelearning.so +0 -0
  138. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.la +41 -0
  139. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.so +0 -0
  140. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.la +41 -0
  141. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.so +0 -0
  142. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.la +41 -0
  143. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.so +0 -0
  144. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.la +41 -0
  145. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.so +0 -0
  146. sage_wheels/lib/singular/MOD/partialgb.la +41 -0
  147. sage_wheels/lib/singular/MOD/partialgb.so +0 -0
  148. sage_wheels/lib/singular/MOD/pyobject.la +41 -0
  149. sage_wheels/lib/singular/MOD/pyobject.so +0 -0
  150. sage_wheels/lib/singular/MOD/singmathic.la +41 -0
  151. sage_wheels/lib/singular/MOD/singmathic.so +0 -0
  152. sage_wheels/lib/singular/MOD/sispasm.la +41 -0
  153. sage_wheels/lib/singular/MOD/sispasm.so +0 -0
  154. sage_wheels/lib/singular/MOD/subsets.la +41 -0
  155. sage_wheels/lib/singular/MOD/subsets.so +0 -0
  156. sage_wheels/lib/singular/MOD/systhreads.la +41 -0
  157. sage_wheels/lib/singular/MOD/systhreads.so +0 -0
  158. sage_wheels/lib/singular/MOD/syzextra.la +41 -0
  159. sage_wheels/lib/singular/MOD/syzextra.so +0 -0
  160. sage_wheels/libexec/singular/MOD/change_cost +0 -0
  161. sage_wheels/libexec/singular/MOD/singularsurf +11 -0
  162. sage_wheels/libexec/singular/MOD/singularsurf_jupyter +9 -0
  163. sage_wheels/libexec/singular/MOD/singularsurf_win +10 -0
  164. sage_wheels/libexec/singular/MOD/solve_IP +0 -0
  165. sage_wheels/libexec/singular/MOD/surfex +16 -0
  166. sage_wheels/libexec/singular/MOD/toric_ideal +0 -0
  167. sage_wheels/share/factory/gftables/10201 +342 -0
  168. sage_wheels/share/factory/gftables/1024 +37 -0
  169. sage_wheels/share/factory/gftables/10609 +356 -0
  170. sage_wheels/share/factory/gftables/11449 +384 -0
  171. sage_wheels/share/factory/gftables/11881 +398 -0
  172. sage_wheels/share/factory/gftables/121 +6 -0
  173. sage_wheels/share/factory/gftables/12167 +408 -0
  174. sage_wheels/share/factory/gftables/125 +7 -0
  175. sage_wheels/share/factory/gftables/12769 +428 -0
  176. sage_wheels/share/factory/gftables/128 +7 -0
  177. sage_wheels/share/factory/gftables/1331 +47 -0
  178. sage_wheels/share/factory/gftables/1369 +48 -0
  179. sage_wheels/share/factory/gftables/14641 +490 -0
  180. sage_wheels/share/factory/gftables/15625 +523 -0
  181. sage_wheels/share/factory/gftables/16 +3 -0
  182. sage_wheels/share/factory/gftables/16129 +540 -0
  183. sage_wheels/share/factory/gftables/16384 +549 -0
  184. sage_wheels/share/factory/gftables/16807 +563 -0
  185. sage_wheels/share/factory/gftables/1681 +58 -0
  186. sage_wheels/share/factory/gftables/169 +8 -0
  187. sage_wheels/share/factory/gftables/17161 +574 -0
  188. sage_wheels/share/factory/gftables/1849 +64 -0
  189. sage_wheels/share/factory/gftables/18769 +628 -0
  190. sage_wheels/share/factory/gftables/19321 +646 -0
  191. sage_wheels/share/factory/gftables/19683 +659 -0
  192. sage_wheels/share/factory/gftables/2048 +71 -0
  193. sage_wheels/share/factory/gftables/2187 +75 -0
  194. sage_wheels/share/factory/gftables/2197 +76 -0
  195. sage_wheels/share/factory/gftables/2209 +76 -0
  196. sage_wheels/share/factory/gftables/22201 +742 -0
  197. sage_wheels/share/factory/gftables/22801 +762 -0
  198. sage_wheels/share/factory/gftables/2401 +82 -0
  199. sage_wheels/share/factory/gftables/243 +11 -0
  200. sage_wheels/share/factory/gftables/24389 +815 -0
  201. sage_wheels/share/factory/gftables/24649 +824 -0
  202. sage_wheels/share/factory/gftables/25 +3 -0
  203. sage_wheels/share/factory/gftables/256 +11 -0
  204. sage_wheels/share/factory/gftables/26569 +888 -0
  205. sage_wheels/share/factory/gftables/27 +3 -0
  206. sage_wheels/share/factory/gftables/27889 +932 -0
  207. sage_wheels/share/factory/gftables/2809 +96 -0
  208. sage_wheels/share/factory/gftables/28561 +954 -0
  209. sage_wheels/share/factory/gftables/289 +12 -0
  210. sage_wheels/share/factory/gftables/29791 +995 -0
  211. sage_wheels/share/factory/gftables/29929 +1000 -0
  212. sage_wheels/share/factory/gftables/3125 +107 -0
  213. sage_wheels/share/factory/gftables/32 +4 -0
  214. sage_wheels/share/factory/gftables/32041 +1070 -0
  215. sage_wheels/share/factory/gftables/32761 +1094 -0
  216. sage_wheels/share/factory/gftables/32768 +1095 -0
  217. sage_wheels/share/factory/gftables/343 +14 -0
  218. sage_wheels/share/factory/gftables/3481 +118 -0
  219. sage_wheels/share/factory/gftables/361 +14 -0
  220. sage_wheels/share/factory/gftables/36481 +1218 -0
  221. sage_wheels/share/factory/gftables/3721 +126 -0
  222. sage_wheels/share/factory/gftables/37249 +1244 -0
  223. sage_wheels/share/factory/gftables/38809 +1296 -0
  224. sage_wheels/share/factory/gftables/39601 +1322 -0
  225. sage_wheels/share/factory/gftables/4 +3 -0
  226. sage_wheels/share/factory/gftables/4096 +139 -0
  227. sage_wheels/share/factory/gftables/44521 +1486 -0
  228. sage_wheels/share/factory/gftables/4489 +152 -0
  229. sage_wheels/share/factory/gftables/49 +4 -0
  230. sage_wheels/share/factory/gftables/4913 +166 -0
  231. sage_wheels/share/factory/gftables/49729 +1660 -0
  232. sage_wheels/share/factory/gftables/5041 +170 -0
  233. sage_wheels/share/factory/gftables/50653 +1691 -0
  234. sage_wheels/share/factory/gftables/512 +20 -0
  235. sage_wheels/share/factory/gftables/51529 +1720 -0
  236. sage_wheels/share/factory/gftables/52441 +1750 -0
  237. sage_wheels/share/factory/gftables/529 +20 -0
  238. sage_wheels/share/factory/gftables/5329 +180 -0
  239. sage_wheels/share/factory/gftables/54289 +1812 -0
  240. sage_wheels/share/factory/gftables/57121 +1906 -0
  241. sage_wheels/share/factory/gftables/58081 +1938 -0
  242. sage_wheels/share/factory/gftables/59049 +1971 -0
  243. sage_wheels/share/factory/gftables/6241 +210 -0
  244. sage_wheels/share/factory/gftables/625 +23 -0
  245. sage_wheels/share/factory/gftables/63001 +2102 -0
  246. sage_wheels/share/factory/gftables/64 +5 -0
  247. sage_wheels/share/factory/gftables/6561 +221 -0
  248. sage_wheels/share/factory/gftables/6859 +231 -0
  249. sage_wheels/share/factory/gftables/6889 +232 -0
  250. sage_wheels/share/factory/gftables/729 +27 -0
  251. sage_wheels/share/factory/gftables/7921 +266 -0
  252. sage_wheels/share/factory/gftables/8 +3 -0
  253. sage_wheels/share/factory/gftables/81 +5 -0
  254. sage_wheels/share/factory/gftables/8192 +276 -0
  255. sage_wheels/share/factory/gftables/841 +30 -0
  256. sage_wheels/share/factory/gftables/9 +3 -0
  257. sage_wheels/share/factory/gftables/9409 +316 -0
  258. sage_wheels/share/factory/gftables/961 +34 -0
  259. sage_wheels/share/info/singular.info +191898 -0
  260. sage_wheels/share/singular/LIB/GND.lib +1359 -0
  261. sage_wheels/share/singular/LIB/JMBTest.lib +976 -0
  262. sage_wheels/share/singular/LIB/JMSConst.lib +1363 -0
  263. sage_wheels/share/singular/LIB/KVequiv.lib +699 -0
  264. sage_wheels/share/singular/LIB/SingularityDBM.lib +491 -0
  265. sage_wheels/share/singular/LIB/VecField.lib +1542 -0
  266. sage_wheels/share/singular/LIB/absfact.lib +959 -0
  267. sage_wheels/share/singular/LIB/ainvar.lib +730 -0
  268. sage_wheels/share/singular/LIB/aksaka.lib +419 -0
  269. sage_wheels/share/singular/LIB/alexpoly.lib +2542 -0
  270. sage_wheels/share/singular/LIB/algebra.lib +1193 -0
  271. sage_wheels/share/singular/LIB/all.lib +136 -0
  272. sage_wheels/share/singular/LIB/arcpoint.lib +514 -0
  273. sage_wheels/share/singular/LIB/arnold.lib +4553 -0
  274. sage_wheels/share/singular/LIB/arnoldclassify.lib +2058 -0
  275. sage_wheels/share/singular/LIB/arr.lib +3486 -0
  276. sage_wheels/share/singular/LIB/assprimeszerodim.lib +755 -0
  277. sage_wheels/share/singular/LIB/autgradalg.lib +3361 -0
  278. sage_wheels/share/singular/LIB/bfun.lib +1964 -0
  279. sage_wheels/share/singular/LIB/bimodules.lib +774 -0
  280. sage_wheels/share/singular/LIB/brillnoether.lib +226 -0
  281. sage_wheels/share/singular/LIB/brnoeth.lib +5017 -0
  282. sage_wheels/share/singular/LIB/central.lib +2169 -0
  283. sage_wheels/share/singular/LIB/chern.lib +4162 -0
  284. sage_wheels/share/singular/LIB/cimonom.lib +571 -0
  285. sage_wheels/share/singular/LIB/cisimplicial.lib +1835 -0
  286. sage_wheels/share/singular/LIB/classify.lib +3239 -0
  287. sage_wheels/share/singular/LIB/classify2.lib +1462 -0
  288. sage_wheels/share/singular/LIB/classifyMapGerms.lib +1515 -0
  289. sage_wheels/share/singular/LIB/classify_aeq.lib +3253 -0
  290. sage_wheels/share/singular/LIB/classifyceq.lib +2092 -0
  291. sage_wheels/share/singular/LIB/classifyci.lib +1133 -0
  292. sage_wheels/share/singular/LIB/combinat.lib +91 -0
  293. sage_wheels/share/singular/LIB/compregb.lib +276 -0
  294. sage_wheels/share/singular/LIB/control.lib +1636 -0
  295. sage_wheels/share/singular/LIB/crypto.lib +3795 -0
  296. sage_wheels/share/singular/LIB/curveInv.lib +667 -0
  297. sage_wheels/share/singular/LIB/curvepar.lib +1817 -0
  298. sage_wheels/share/singular/LIB/customstd.lib +100 -0
  299. sage_wheels/share/singular/LIB/deRham.lib +5979 -0
  300. sage_wheels/share/singular/LIB/decodegb.lib +2134 -0
  301. sage_wheels/share/singular/LIB/decomp.lib +1655 -0
  302. sage_wheels/share/singular/LIB/deflation.lib +872 -0
  303. sage_wheels/share/singular/LIB/deform.lib +925 -0
  304. sage_wheels/share/singular/LIB/difform.lib +3055 -0
  305. sage_wheels/share/singular/LIB/divisors.lib +750 -0
  306. sage_wheels/share/singular/LIB/dmod.lib +5817 -0
  307. sage_wheels/share/singular/LIB/dmodapp.lib +3269 -0
  308. sage_wheels/share/singular/LIB/dmodideal.lib +1211 -0
  309. sage_wheels/share/singular/LIB/dmodloc.lib +2645 -0
  310. sage_wheels/share/singular/LIB/dmodvar.lib +818 -0
  311. sage_wheels/share/singular/LIB/dummy.lib +17 -0
  312. sage_wheels/share/singular/LIB/elim.lib +1009 -0
  313. sage_wheels/share/singular/LIB/ellipticcovers.lib +548 -0
  314. sage_wheels/share/singular/LIB/enumpoints.lib +146 -0
  315. sage_wheels/share/singular/LIB/equising.lib +2127 -0
  316. sage_wheels/share/singular/LIB/ffmodstd.lib +2384 -0
  317. sage_wheels/share/singular/LIB/ffsolve.lib +1289 -0
  318. sage_wheels/share/singular/LIB/findifs.lib +778 -0
  319. sage_wheels/share/singular/LIB/finitediff.lib +1768 -0
  320. sage_wheels/share/singular/LIB/finvar.lib +7989 -0
  321. sage_wheels/share/singular/LIB/fpadim.lib +2429 -0
  322. sage_wheels/share/singular/LIB/fpalgebras.lib +1666 -0
  323. sage_wheels/share/singular/LIB/fpaprops.lib +1462 -0
  324. sage_wheels/share/singular/LIB/freegb.lib +3853 -0
  325. sage_wheels/share/singular/LIB/general.lib +1350 -0
  326. sage_wheels/share/singular/LIB/gfan.lib +1768 -0
  327. sage_wheels/share/singular/LIB/gitfan.lib +3130 -0
  328. sage_wheels/share/singular/LIB/gkdim.lib +99 -0
  329. sage_wheels/share/singular/LIB/gmspoly.lib +589 -0
  330. sage_wheels/share/singular/LIB/gmssing.lib +1739 -0
  331. sage_wheels/share/singular/LIB/goettsche.lib +909 -0
  332. sage_wheels/share/singular/LIB/graal.lib +1366 -0
  333. sage_wheels/share/singular/LIB/gradedModules.lib +2541 -0
  334. sage_wheels/share/singular/LIB/graphics.lib +360 -0
  335. sage_wheels/share/singular/LIB/grobcov.lib +7706 -0
  336. sage_wheels/share/singular/LIB/groups.lib +1123 -0
  337. sage_wheels/share/singular/LIB/grwalk.lib +507 -0
  338. sage_wheels/share/singular/LIB/hdepth.lib +194 -0
  339. sage_wheels/share/singular/LIB/help.cnf +57 -0
  340. sage_wheels/share/singular/LIB/hess.lib +1946 -0
  341. sage_wheels/share/singular/LIB/hnoether.lib +4292 -0
  342. sage_wheels/share/singular/LIB/hodge.lib +400 -0
  343. sage_wheels/share/singular/LIB/homolog.lib +1965 -0
  344. sage_wheels/share/singular/LIB/hyperel.lib +975 -0
  345. sage_wheels/share/singular/LIB/inout.lib +679 -0
  346. sage_wheels/share/singular/LIB/integralbasis.lib +6224 -0
  347. sage_wheels/share/singular/LIB/interval.lib +1418 -0
  348. sage_wheels/share/singular/LIB/intprog.lib +778 -0
  349. sage_wheels/share/singular/LIB/invar.lib +443 -0
  350. sage_wheels/share/singular/LIB/involut.lib +980 -0
  351. sage_wheels/share/singular/LIB/jacobson.lib +1215 -0
  352. sage_wheels/share/singular/LIB/kskernel.lib +534 -0
  353. sage_wheels/share/singular/LIB/latex.lib +3146 -0
  354. sage_wheels/share/singular/LIB/lejeune.lib +651 -0
  355. sage_wheels/share/singular/LIB/linalg.lib +2040 -0
  356. sage_wheels/share/singular/LIB/locnormal.lib +212 -0
  357. sage_wheels/share/singular/LIB/lrcalc.lib +526 -0
  358. sage_wheels/share/singular/LIB/makedbm.lib +294 -0
  359. sage_wheels/share/singular/LIB/mathml.lib +813 -0
  360. sage_wheels/share/singular/LIB/matrix.lib +1372 -0
  361. sage_wheels/share/singular/LIB/maxlike.lib +1132 -0
  362. sage_wheels/share/singular/LIB/methods.lib +212 -0
  363. sage_wheels/share/singular/LIB/moddiq.lib +322 -0
  364. sage_wheels/share/singular/LIB/modfinduni.lib +181 -0
  365. sage_wheels/share/singular/LIB/modnormal.lib +218 -0
  366. sage_wheels/share/singular/LIB/modprimdec.lib +1278 -0
  367. sage_wheels/share/singular/LIB/modquotient.lib +269 -0
  368. sage_wheels/share/singular/LIB/modstd.lib +1024 -0
  369. sage_wheels/share/singular/LIB/modular.lib +545 -0
  370. sage_wheels/share/singular/LIB/modules.lib +2561 -0
  371. sage_wheels/share/singular/LIB/modwalk.lib +609 -0
  372. sage_wheels/share/singular/LIB/mondromy.lib +1016 -0
  373. sage_wheels/share/singular/LIB/monomialideal.lib +3851 -0
  374. sage_wheels/share/singular/LIB/mprimdec.lib +2353 -0
  375. sage_wheels/share/singular/LIB/mregular.lib +1863 -0
  376. sage_wheels/share/singular/LIB/multigrading.lib +5629 -0
  377. sage_wheels/share/singular/LIB/ncHilb.lib +777 -0
  378. sage_wheels/share/singular/LIB/ncModslimgb.lib +791 -0
  379. sage_wheels/share/singular/LIB/ncalg.lib +16311 -0
  380. sage_wheels/share/singular/LIB/ncall.lib +31 -0
  381. sage_wheels/share/singular/LIB/ncdecomp.lib +468 -0
  382. sage_wheels/share/singular/LIB/ncfactor.lib +13371 -0
  383. sage_wheels/share/singular/LIB/ncfrac.lib +1023 -0
  384. sage_wheels/share/singular/LIB/nchilbert.lib +448 -0
  385. sage_wheels/share/singular/LIB/nchomolog.lib +759 -0
  386. sage_wheels/share/singular/LIB/ncloc.lib +361 -0
  387. sage_wheels/share/singular/LIB/ncpreim.lib +795 -0
  388. sage_wheels/share/singular/LIB/ncrat.lib +2849 -0
  389. sage_wheels/share/singular/LIB/nctools.lib +1887 -0
  390. sage_wheels/share/singular/LIB/nets.lib +1456 -0
  391. sage_wheels/share/singular/LIB/nfmodstd.lib +1000 -0
  392. sage_wheels/share/singular/LIB/nfmodsyz.lib +732 -0
  393. sage_wheels/share/singular/LIB/noether.lib +1106 -0
  394. sage_wheels/share/singular/LIB/normal.lib +8700 -0
  395. sage_wheels/share/singular/LIB/normaliz.lib +2226 -0
  396. sage_wheels/share/singular/LIB/ntsolve.lib +362 -0
  397. sage_wheels/share/singular/LIB/numerAlg.lib +560 -0
  398. sage_wheels/share/singular/LIB/numerDecom.lib +2261 -0
  399. sage_wheels/share/singular/LIB/olga.lib +1933 -0
  400. sage_wheels/share/singular/LIB/orbitparam.lib +351 -0
  401. sage_wheels/share/singular/LIB/parallel.lib +319 -0
  402. sage_wheels/share/singular/LIB/paraplanecurves.lib +3110 -0
  403. sage_wheels/share/singular/LIB/perron.lib +202 -0
  404. sage_wheels/share/singular/LIB/pfd.lib +2223 -0
  405. sage_wheels/share/singular/LIB/phindex.lib +642 -0
  406. sage_wheels/share/singular/LIB/pointid.lib +673 -0
  407. sage_wheels/share/singular/LIB/polybori.lib +1430 -0
  408. sage_wheels/share/singular/LIB/polyclass.lib +525 -0
  409. sage_wheels/share/singular/LIB/polylib.lib +1174 -0
  410. sage_wheels/share/singular/LIB/polymake.lib +1902 -0
  411. sage_wheels/share/singular/LIB/presolve.lib +1533 -0
  412. sage_wheels/share/singular/LIB/primdec.lib +9576 -0
  413. sage_wheels/share/singular/LIB/primdecint.lib +1782 -0
  414. sage_wheels/share/singular/LIB/primitiv.lib +401 -0
  415. sage_wheels/share/singular/LIB/puiseuxexpansions.lib +1631 -0
  416. sage_wheels/share/singular/LIB/purityfiltration.lib +960 -0
  417. sage_wheels/share/singular/LIB/qhmoduli.lib +1561 -0
  418. sage_wheels/share/singular/LIB/qmatrix.lib +293 -0
  419. sage_wheels/share/singular/LIB/random.lib +455 -0
  420. sage_wheels/share/singular/LIB/ratgb.lib +489 -0
  421. sage_wheels/share/singular/LIB/realclassify.lib +5759 -0
  422. sage_wheels/share/singular/LIB/realizationMatroids.lib +772 -0
  423. sage_wheels/share/singular/LIB/realrad.lib +1197 -0
  424. sage_wheels/share/singular/LIB/recover.lib +2628 -0
  425. sage_wheels/share/singular/LIB/redcgs.lib +3984 -0
  426. sage_wheels/share/singular/LIB/reesclos.lib +465 -0
  427. sage_wheels/share/singular/LIB/resbinomial.lib +2802 -0
  428. sage_wheels/share/singular/LIB/resgraph.lib +789 -0
  429. sage_wheels/share/singular/LIB/resjung.lib +820 -0
  430. sage_wheels/share/singular/LIB/resolve.lib +5110 -0
  431. sage_wheels/share/singular/LIB/resources.lib +170 -0
  432. sage_wheels/share/singular/LIB/reszeta.lib +5473 -0
  433. sage_wheels/share/singular/LIB/ring.lib +1328 -0
  434. sage_wheels/share/singular/LIB/ringgb.lib +343 -0
  435. sage_wheels/share/singular/LIB/rinvar.lib +1153 -0
  436. sage_wheels/share/singular/LIB/rootisolation.lib +1481 -0
  437. sage_wheels/share/singular/LIB/rootsmr.lib +709 -0
  438. sage_wheels/share/singular/LIB/rootsur.lib +886 -0
  439. sage_wheels/share/singular/LIB/rstandard.lib +607 -0
  440. sage_wheels/share/singular/LIB/rwalk.lib +336 -0
  441. sage_wheels/share/singular/LIB/sagbi.lib +1353 -0
  442. sage_wheels/share/singular/LIB/sagbiNormaliz.lib +1622 -0
  443. sage_wheels/share/singular/LIB/sagbiNormaliz0.lib +1498 -0
  444. sage_wheels/share/singular/LIB/sagbigrob.lib +449 -0
  445. sage_wheels/share/singular/LIB/schreyer.lib +321 -0
  446. sage_wheels/share/singular/LIB/schubert.lib +2551 -0
  447. sage_wheels/share/singular/LIB/sets.lib +524 -0
  448. sage_wheels/share/singular/LIB/sheafcoh.lib +1663 -0
  449. sage_wheels/share/singular/LIB/signcond.lib +437 -0
  450. sage_wheels/share/singular/LIB/sing.lib +1094 -0
  451. sage_wheels/share/singular/LIB/sing4ti2.lib +419 -0
  452. sage_wheels/share/singular/LIB/solve.lib +2243 -0
  453. sage_wheels/share/singular/LIB/spcurve.lib +1077 -0
  454. sage_wheels/share/singular/LIB/spectrum.lib +62 -0
  455. sage_wheels/share/singular/LIB/sresext.lib +757 -0
  456. sage_wheels/share/singular/LIB/ssi.lib +143 -0
  457. sage_wheels/share/singular/LIB/standard.lib +2769 -0
  458. sage_wheels/share/singular/LIB/stanleyreisner.lib +473 -0
  459. sage_wheels/share/singular/LIB/stdmodule.lib +547 -0
  460. sage_wheels/share/singular/LIB/stratify.lib +1070 -0
  461. sage_wheels/share/singular/LIB/surf.lib +506 -0
  462. sage_wheels/share/singular/LIB/surf_jupyter.lib +223 -0
  463. sage_wheels/share/singular/LIB/surfacesignature.lib +522 -0
  464. sage_wheels/share/singular/LIB/surfex.lib +1462 -0
  465. sage_wheels/share/singular/LIB/swalk.lib +877 -0
  466. sage_wheels/share/singular/LIB/symodstd.lib +1570 -0
  467. sage_wheels/share/singular/LIB/systhreads.lib +74 -0
  468. sage_wheels/share/singular/LIB/tasks.lib +1324 -0
  469. sage_wheels/share/singular/LIB/tateProdCplxNegGrad.lib +2412 -0
  470. sage_wheels/share/singular/LIB/teachstd.lib +858 -0
  471. sage_wheels/share/singular/LIB/template.lib +116 -0
  472. sage_wheels/share/singular/LIB/toric.lib +1119 -0
  473. sage_wheels/share/singular/LIB/transformation.lib +116 -0
  474. sage_wheels/share/singular/LIB/triang.lib +1197 -0
  475. sage_wheels/share/singular/LIB/tropical.lib +8741 -0
  476. sage_wheels/share/singular/LIB/tropicalEllipticCovers.lib +2922 -0
  477. sage_wheels/share/singular/LIB/tropicalNewton.lib +1128 -0
  478. sage_wheels/share/singular/LIB/tst.lib +1108 -0
  479. sage_wheels/share/singular/LIB/weierstr.lib +241 -0
  480. sage_wheels/share/singular/LIB/zeroset.lib +1478 -0
  481. sage_wheels/share/singular/emacs/.emacs-general +184 -0
  482. sage_wheels/share/singular/emacs/.emacs-singular +234 -0
  483. sage_wheels/share/singular/emacs/COPYING +44 -0
  484. sage_wheels/share/singular/emacs/cmd-cmpl.el +241 -0
  485. sage_wheels/share/singular/emacs/ex-cmpl.el +1681 -0
  486. sage_wheels/share/singular/emacs/hlp-cmpl.el +4318 -0
  487. sage_wheels/share/singular/emacs/lib-cmpl.el +179 -0
  488. sage_wheels/share/singular/emacs/singular.el +4273 -0
  489. sage_wheels/share/singular/emacs/singular.xpm +39 -0
  490. sage_wheels/share/singular/singular.idx +5002 -0
@@ -0,0 +1,1782 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ version="version primdecint.lib 4.4.1.1 Feb_2025 "; // $Id: c3a7a5c16612ce896fb311ab4e8c3ca7dff29ea4 $
3
+ category = "Commutative Algebra";
4
+ info="
5
+ LIBRARY: primdecint.lib primary decomposition of an ideal in the polynomial
6
+ ring over the integers
7
+
8
+ AUTHORS: G. Pfister pfister@mathematik.uni-kl.de
9
+ @* A. Sadiq afshanatiq@gmail.com
10
+ @* S. Steidel steidel@mathematik.uni-kl.de
11
+
12
+ OVERVIEW:
13
+
14
+ A library for computing the primary decomposition of an ideal in the
15
+ polynomial ring over the integers, Z[x_1,...,x_n].
16
+ The first procedure 'primdecZ' can be used in parallel.
17
+ The coefficients must always be ZZ.
18
+
19
+ Reference: Pfister, Sadiq, Steidel , \"An Algorithm for primary decomposition in polynomial rings over the integers\" , arXiv:1008.2074
20
+
21
+ PROCEDURES:
22
+ primdecZ(I); compute the primary decomposition of ideal I
23
+ primdecZM(I); compute the primary decomposition of module I
24
+ minAssZ(I); compute the minimal associated primes of I
25
+ radicalZ(I); compute the radical of I
26
+ heightZ(I); compute the height of I
27
+ equidimZ(I); compute the equidimensional part of I
28
+ intersectZ(I,J) compute the intersection of I and J
29
+
30
+ SEE ALSO: primdec_lib
31
+ KEYWORDS: primary decomposition
32
+ ";
33
+
34
+ LIB "primdec.lib";
35
+ LIB "ring.lib";
36
+
37
+ ////////////////////////////////////////////////////////////////////////////////
38
+
39
+ proc primdecZ(ideal I, list #)
40
+ "USAGE: primdecZ(I[, n]); I ideal, n integer (number of processors)
41
+ NOTE: If size(#) > 0, then #[1] is the number of available processors for
42
+ the computation.@*
43
+ The coefficients must be ZZ.
44
+ RETURN: a list pr of primary ideals and their associated primes:
45
+ @format
46
+ pr[i][1] the i-th primary component,
47
+ pr[i][2] the i-th prime component.
48
+ @end format
49
+ EXAMPLE: example primdecZ; shows an example
50
+ "
51
+ {
52
+ if (coeffs(basering)!=ZZ) { ERROR("coefficoents must be ZZ"); }
53
+ if(size(I)==0){return(list(list(ideal(0),ideal(0))));}
54
+
55
+ //-------------------- Initialize optional parameters ------------------------
56
+ if(size(#) > 0)
57
+ {
58
+ if(size(#) == 1)
59
+ {
60
+ int n = #[1];
61
+ ideal TES = 1;
62
+ }
63
+ if(size(#) == 2)
64
+ {
65
+ int n = #[1];
66
+ ideal TES = #[2];
67
+ }
68
+ }
69
+ else
70
+ {
71
+ int n = 1;
72
+ ideal TES = 1;
73
+ }
74
+ if (system("cpu")<=1) { n=1; }
75
+
76
+
77
+ if(size(I)==1 && deg(I[1]) == 0)
78
+ {
79
+ ideal J = I;
80
+ }
81
+ else
82
+ {
83
+ ideal J = stdZ(I);
84
+ }
85
+
86
+ ideal K,N;
87
+ def R=basering;
88
+ number s;
89
+ list rl=ring_list(R);
90
+ int i,j,p,m,ex,nu,k_link;
91
+ list P,B,IS;
92
+ ideal Q,JJ;
93
+ ideal TQ=1;
94
+ if(deg(J[1])==0)
95
+ {
96
+ //=== I intersected with Z is not zero
97
+ list rp=rl;
98
+ rp[1]=0;
99
+ //=== q is generator of I intersect Z
100
+ number q=leadcoef(J[1]);
101
+ def Rhelp=ring(rp);
102
+ setring Rhelp;
103
+ number q=imap(R,q);
104
+ //=== computes the primes occurring in a generator of I intersect Z
105
+ list L = primefactors(q);
106
+
107
+ list A;
108
+ A[1]= ideal(0);
109
+ ideal J = imap(R,J);
110
+
111
+ for(j=1;j<=size(L[2]);j++)
112
+ {
113
+ if(L[2][j] > 1){ ex = 1; break; }
114
+ }
115
+
116
+ if(printlevel >= 10)
117
+ {
118
+ "n = "+string(n);
119
+ "size(L[2]) = "+string(size(L[2]));
120
+ }
121
+
122
+ int RT = rtimer;
123
+ if((n > 1) && (n < size(L[2])))
124
+ {
125
+
126
+ //----- Create n1 links l(1),...,l(n1), open all of them and compute ---------
127
+ //----- standard basis for the primes L[1][2],...,L[1][n + 1]. ---------
128
+
129
+ for(i = 1; i <= n; i++)
130
+ {
131
+ p=int(L[1][i + 1]);
132
+ nu=int(L[2][i + 1]);
133
+ link l(i) = "ssi:fork";
134
+ open(l(i));
135
+ write(l(i), quote(modp(eval(J), eval(p), eval(nu))));
136
+ }
137
+
138
+ p = int(L[1][1]);
139
+ nu = int(L[2][1]);
140
+ int t = timer;
141
+ A[size(A)+1] = modp(J, p, nu);
142
+ t = timer - t;
143
+ if(t > 60) { t = 60; }
144
+ int i_sleep = system("sh", "sleep "+string(t));
145
+
146
+ j = n + 2;
147
+
148
+ while(j <= size(L[2]) + 1)
149
+ {
150
+ for(i = 1; i <= n; i++)
151
+ {
152
+ //=== ask if link l(i) is ready otherwise sleep for t seconds
153
+ if(status(l(i), "read", "ready"))
154
+ {
155
+ //=== read the result from l(i)
156
+ A[size(A)+1] = read(l(i));
157
+
158
+ if(j <= size(L[2]))
159
+ {
160
+ p=int(L[1][j]);
161
+ nu=int(L[2][j]);
162
+ write(l(i), quote(modp(eval(J), eval(p), eval(nu))));
163
+ j++;
164
+ }
165
+ else
166
+ {
167
+ k_link++;
168
+ close(l(i));
169
+ }
170
+ }
171
+ }
172
+ //=== k_link describes the number of closed links
173
+ if(k_link == n)
174
+ {
175
+ j++;
176
+ }
177
+ i_sleep = system("sh", "sleep "+string(t));
178
+ }
179
+ }
180
+ else
181
+ {
182
+ for(j=1;j<=size(L[2]);j++)
183
+ {
184
+ p=int(L[1][j]);
185
+ nu=int(L[2][j]);
186
+ A[size(A)+1] = modp(J, p,nu );
187
+ }
188
+ }
189
+
190
+ setring R;
191
+ list A = imap(Rhelp,A);
192
+ if(printlevel >= 10)
193
+ {
194
+ "A is computed in "+string(rtimer - RT)+" seconds.";
195
+ }
196
+ for(i=2;i<=size(A);i++)
197
+ {
198
+ //=== computes for all p in L the minimal associated primes of
199
+ //=== IZ/p[variables]
200
+ p = int(A[i][2]);
201
+ if(printlevel >= 10)
202
+ {
203
+ "p = "+string(p);
204
+ RT = rtimer;
205
+ }
206
+ nu = int(A[i][3]);
207
+ //=== maximal power of p dividing q, generator of I intersect Z
208
+ s = p^nu;
209
+
210
+ rp[1] = p;
211
+ def S = ring(rp);
212
+ setring S;
213
+ ideal J = imap(R,J);
214
+ setring R;
215
+
216
+ if(nu>1)
217
+ {
218
+ //=== p is of multiplicity > 1 in q
219
+
220
+ B = A[i][1];
221
+ for(j=1;j<=size(B);j++)
222
+ {
223
+ //=== the minimal associated primes of I
224
+ K=B[j],p;
225
+ K=stdZ(K);
226
+ B[j]=K;
227
+ }
228
+ for(j=1;j<=size(B);j++)
229
+ {
230
+ K=B[j];
231
+ //=== compute maximal independent set for KZ/p[variables]
232
+
233
+ setring S;
234
+ J=imap(R,K);
235
+ J=simplify(J,2);
236
+ attrib(J,"isSB",1);
237
+ IS=Primdec::maxIndependSet(J);
238
+ setring R;
239
+ //=== computing the pseudo primary and extract it
240
+ N=J,s;
241
+ N=stdZ(N);
242
+ Q=extractZ(N,j,IS,B);
243
+ //=== test for useless primaries
244
+ if(size(reduce(TES,Q,5))>0)
245
+ {
246
+ TQ=intersectZ(TQ,Q);
247
+ //TQ=intersect(TQ,Q);
248
+ P[size(P)+1]=list(Q,K);
249
+ }
250
+ }
251
+ }
252
+ else
253
+ {
254
+ //=== p is of multiplicity 1 in q we can compute the
255
+ //=== primary decomposition directly
256
+
257
+ B = A[i][1];
258
+ for(j=1;j<=size(B);j++)
259
+ {
260
+ K=B[j][2],p;
261
+ K=stdZ(K);
262
+ Q=B[j][1],p;
263
+ Q=stdZ(Q);
264
+ if(size(reduce(TES,Q,5))>0)
265
+ {
266
+ //TQ=intersectZ(TQ,Q);
267
+ P[size(P)+1]=list(Q,K);
268
+ }
269
+ }
270
+ if(ex)
271
+ {
272
+ JJ=imap(S,J);
273
+ JJ=JJ,p;
274
+ JJ=stdZ(JJ);
275
+ TQ=intersectZ(TQ,JJ);
276
+ //TQ=intersect(TQ,JJ);
277
+ }
278
+ }
279
+ kill S;
280
+ if(printlevel >= 10)
281
+ {
282
+ string(p)+" done in "+string(rtimer - RT)+" seconds.";
283
+ }
284
+ }
285
+
286
+ setring R;
287
+ if(!ex){return(P);}
288
+ J=stdZ(J);
289
+ TQ=intersectZ(TQ,TES);
290
+ //TQ=intersect(TQ,TES);
291
+ if(size(reduce(TQ,J,5))!=0)
292
+ {
293
+ //=== taking care about embedded components
294
+ K=stdZ(quotientZ(J,TQ));
295
+ ideal W=K;
296
+ m++;
297
+ while(size(reduce(intersectZ(W,TQ),J,5))!=0)
298
+ //while(size(reduce(intersect(W,TQ),J,5))!=0)
299
+ {
300
+ W=stdZ(I+specialPowerZ(K,m));
301
+ m++;
302
+ }
303
+ list E=primdecZ(W,n,TQ);
304
+ for(i=1;i<=size(E);i++)
305
+ {
306
+ P[size(P)+1]=E[i];
307
+ }
308
+ }
309
+ return(P);
310
+ }
311
+
312
+ //==== the ideal intersected with Z is zero
313
+ rl[1]=0;
314
+ def Rhelp=ring(rl);
315
+ setring Rhelp;
316
+ ideal J=imap(R,J);
317
+ J=std(J);
318
+ //=== the primary decomposition over Q which gives the primary
319
+ //=== decomposition of I:h for a suitable integer h
320
+ list pr=primdecGTZ(J);
321
+ for(i=1;i<=size(pr);i++)
322
+ {
323
+ pr[i]=list(std(pr[i][1]),std(pr[i][2]));
324
+ }
325
+ setring R;
326
+ list pr=imap(Rhelp,pr);
327
+ //=== intersection with Z[variables]
328
+ for(i=1;i<=size(pr);i++)
329
+ {
330
+ pr[i]=list(coefZ(pr[i][1])[1],coefZ(pr[i][2])[1]);
331
+ }
332
+ //=== find h in Z such that I is the intersection of I:h and <I,h>
333
+ //=== and I:h = IQ[variables] intersected with Z[variables]
334
+ list H =coefZ(J);
335
+ ideal Y=H[1];
336
+ int h=H[2];
337
+ J=J,h;
338
+ //=== call primary decomposition over Z for <I,h>
339
+ ideal testid = 1;
340
+ for(i = 1; i<=size(pr); i++)
341
+ {
342
+ testid = intersect(testid, pr[i][1]);
343
+ }
344
+ list M;
345
+ if(h!=1)
346
+ {
347
+ M=primdecZ(J,n,Y);
348
+ j=0;
349
+ //=== remove useless primary ideals
350
+ while(j<size(M))
351
+ {
352
+ j++;
353
+ M[j][1]=stdZ(M[j][1]);
354
+ testid = intersect(testid, M[j][1]);
355
+ if((reduce(testid, std(I))+0 == 0) && (reduce(I, std(testid))+0 == 0))
356
+ {
357
+ for(i=1;i<=j;i++)
358
+ {
359
+ pr[size(pr)+1]=M[i];
360
+ }
361
+ return(pr);
362
+ }
363
+ for(i=1;i<=size(pr);i++)
364
+ {
365
+ if(size(reduce(pr[i][1],M[j][1],5))==0)
366
+ {
367
+ M=delete(M,j);
368
+ j--;
369
+ break;
370
+ }
371
+ }
372
+ }
373
+ for(i=1;i<=size(M);i++)
374
+ {
375
+ pr[size(pr)+1]=M[i];
376
+ }
377
+ }
378
+ return(pr);
379
+ }
380
+ example
381
+ { "EXAMPLE:"; echo = 2;
382
+ ring R=integer,(a,b,c,d),dp;
383
+ ideal I1=9,a,b;
384
+ ideal I2=3,c;
385
+ ideal I3=11,2a,7b;
386
+ ideal I4=13a2,17b4;
387
+ ideal I5=9c5,6d5;
388
+ ideal I6=17,a15,b15,c15,d15;
389
+ ideal I=intersectZ(I1,I2);
390
+ I=intersectZ(I,I3);
391
+ I=intersectZ(I,I4);
392
+ I=intersectZ(I,I5);
393
+ I=intersectZ(I,I6);
394
+ primdecZ(I);
395
+ ideal J=intersectZ(ideal(17,a),ideal(17,a2,b));
396
+ primdecZ(J);
397
+ ideal K=intersectZ(ideal(9,a+3),ideal(9,b+3));
398
+ primdecZ(K);
399
+ }
400
+
401
+ ////////////////////////////////////////////////////////////////////////////////
402
+
403
+ proc minAssZ(ideal I)
404
+ "USAGE: minAssZ(I); I ideal
405
+ The coefficients must be ZZ.
406
+ RETURN: a list pr of associated primes:
407
+ EXAMPLE: example minAssZ; shows an example
408
+ "
409
+ {
410
+ if (coeffs(basering)!=ZZ) { ERROR("coefficoents must be ZZ"); }
411
+ if(size(I)==0){return(list(ideal(0)));}
412
+ if(deg(I[1])==0)
413
+ {
414
+ ideal J=I;
415
+ }
416
+ else
417
+ {
418
+ ideal J=stdZ(I);
419
+ }
420
+ ideal K;
421
+ def R=basering;
422
+ list rl=ring_list(R);
423
+ int i,j,p,m;
424
+ list P,B;
425
+ if(deg(J[1])==0)
426
+ {
427
+ //=== I intersected with Z is not zero
428
+ list rp=rl;
429
+ rp[1]=0;
430
+ number q=leadcoef(J[1]);
431
+ def Rhelp=ring(rp);
432
+ setring Rhelp;
433
+ number q=imap(R,q);
434
+ //=== computes the primes occurring in a generator of I intersect Z
435
+ //list L=PollardRho(q,5000,1);
436
+ list L=primefactors(q)[1];
437
+ for(i=1;i<=size(L);i++)
438
+ {
439
+ //=== computes for all p in L the minimal associated primes of
440
+ //=== IZ/p[variables]
441
+ p=int(L[i]);
442
+ setring R;
443
+ rp[1]=p;
444
+ def S=ring(rp);
445
+ setring S;
446
+ ideal J=imap(R,J);
447
+ list A=minAssGTZ(J);
448
+ setring R;
449
+ B=imap(S,A);
450
+ kill S;
451
+ for(j=1;j<=size(B);j++)
452
+ {
453
+ //=== the minimal associated primes of I
454
+ if(B[j][1]!=1)
455
+ {
456
+ K=B[j],p;
457
+ K=stdZ(K);
458
+ P[size(P)+1]=K;
459
+ }
460
+ }
461
+ setring Rhelp;
462
+ }
463
+ setring R;
464
+ return(P);
465
+ }
466
+ //==== the ideal intersected with Z is zero
467
+ rl[1]=0;
468
+ def Rhelp=ring(rl);
469
+ setring Rhelp;
470
+ ideal J=imap(R,J);
471
+ J=std(J);
472
+ //=== the primary decomposition over Q which gives the primary
473
+ //=== decomposition of I:h for a suitable integer h
474
+ list pr=minAssGTZ(J);
475
+ for(i=1;i<=size(pr);i++)
476
+ {
477
+ pr[i]=std(pr[i]);
478
+ }
479
+ setring R;
480
+ list pr=imap(Rhelp,pr);
481
+ //=== intersection with Z[variables]
482
+ for(i=1;i<=size(pr);i++)
483
+ {
484
+ pr[i]=coefZ(pr[i])[1];
485
+ }
486
+ //=== find h in Z such that I is the intersection of I:h and I,h
487
+ //=== and I:h =IQ[variables] intersected with Z[variables]
488
+ list H=coefZ(J);
489
+ int h=H[2];
490
+ J=J,h;
491
+ //=== call associated primes over Z for I,h
492
+ list M;
493
+ if(h!=1)
494
+ {
495
+ M=minAssZ(J);
496
+ //=== remove non-minimal primes
497
+ j=0;
498
+ while(j<size(M))
499
+ {
500
+ j++;
501
+ M[j]=stdZ(M[j]);
502
+ for(i=1;i<=size(pr);i++)
503
+ {
504
+ if(size(reduce(pr[i],M[j],5))==0)
505
+ {
506
+ M=delete(M,j);
507
+ j--;
508
+ break;
509
+ }
510
+ }
511
+ }
512
+ for(i=1;i<=size(M);i++)
513
+ {
514
+ pr[size(pr)+1]=M[i];
515
+ }
516
+ }
517
+ return(pr);
518
+ }
519
+ example
520
+ { "EXAMPLE:"; echo = 2;
521
+ ring R=integer,(a,b,c,d),dp;
522
+ ideal I1=9,a,b;
523
+ ideal I2=3,c;
524
+ ideal I3=11,2a,7b;
525
+ ideal I4=13a2,17b4;
526
+ ideal I5=9c5,6d5;
527
+ ideal I6=17,a15,b15,c15,d15;
528
+ ideal I=intersectZ(I1,I2);
529
+ I=intersectZ(I,I3);
530
+ I=intersectZ(I,I4);
531
+ I=intersectZ(I,I5);
532
+ I=intersectZ(I,I6);
533
+ minAssZ(I);
534
+ ideal J=intersectZ(ideal(17,a),ideal(17,a2,b));
535
+ minAssZ(J);
536
+ ideal K=intersectZ(ideal(9,a+3),ideal(9,b+3));
537
+ minAssZ(K);
538
+ }
539
+
540
+ ////////////////////////////////////////////////////////////////////////////////
541
+
542
+ proc heightZ(ideal I)
543
+ "USAGE: heightZ(I); I ideal
544
+ The coefficients must be ZZ.
545
+ RETURN: the height of the input ideal
546
+ EXAMPLE: example heightZ; shows an example
547
+ "
548
+ {
549
+ if (coeffs(basering)!=ZZ) { ERROR("coefficoents must be ZZ"); }
550
+ if(size(I)==0){return(0);}
551
+ if(deg(I[1])==0)
552
+ {
553
+ ideal J=I;
554
+ }
555
+ else
556
+ {
557
+ ideal J=stdZ(I);
558
+ }
559
+ ideal K=1;
560
+ def R=basering;
561
+ list rl=ring_list(R);
562
+ int i,j,p,m;
563
+ list P;
564
+ ideal B;
565
+ if(deg(J[1])==0)
566
+ {
567
+ //=== I intersected with Z is not zero
568
+ m=nvars(R);
569
+ list rp=rl;
570
+ rp[1]=0;
571
+ number q=leadcoef(J[1]);
572
+ def Rhelp=ring(rp);
573
+ setring Rhelp;
574
+ number q=imap(R,q);
575
+ //=== computes the primes occurring in a generator of I intersect Z
576
+ //list L=PollardRho(q,5000,1);
577
+ list L=primefactors(q)[1];
578
+ for(i=1;i<=size(L);i++)
579
+ {
580
+ //=== computes for all p in L the std of IZ/p[variables]
581
+ p=int(L[i]);
582
+ setring R;
583
+ rp[1]=p;
584
+ def S=ring(rp);
585
+ setring S;
586
+ ideal J=imap(R,J);
587
+ j=nvars(R)-dim(std(J));
588
+ if(j<m){m=j;}
589
+ setring Rhelp;
590
+ kill S;
591
+ }
592
+ setring R;
593
+ return(m+1);
594
+ }
595
+ //==== the ideal intersected with Z is zero
596
+ rl[1]=0;
597
+ def Rhelp=ring(rl);
598
+ setring Rhelp;
599
+ ideal J=imap(R,J);
600
+ J=std(J);
601
+ m=nvars(R)-dim(J);
602
+ //=== the height over Q
603
+ //=== of I:h for a suitable integer h
604
+ setring R;
605
+ //=== find h in Z such that I is the intersection of I:h and I,h
606
+ //=== and I:h =IQ[variables] intersected with Z[variables]
607
+ list H=coefZ(J);
608
+ int h=H[2];
609
+ J=J,h;
610
+ //=== call height over Z for I,h
611
+ if(h!=1)
612
+ {
613
+ j=heightZ(J);
614
+ if(j<m){m=j;}
615
+ }
616
+ return(m);
617
+ }
618
+ example
619
+ { "EXAMPLE:"; echo = 2;
620
+ ring R=integer,(a,b,c,d),dp;
621
+ ideal I1=9,a,b;
622
+ ideal I2=3,c;
623
+ ideal I3=11,2a,7b;
624
+ ideal I4=13a2,17b4;
625
+ ideal I5=9c5,6d5;
626
+ ideal I6=17,a15,b15,c15,d15;
627
+ ideal I=intersectZ(I1,I2);
628
+ I=intersectZ(I,I3);
629
+ I=intersectZ(I,I4);
630
+ I=intersectZ(I,I5);
631
+ I=intersectZ(I,I6);
632
+ heightZ(I);
633
+ }
634
+
635
+ ////////////////////////////////////////////////////////////////////////////////
636
+
637
+ proc radicalZ(ideal I)
638
+ "USAGE: radicalZ(I); I ideal
639
+ The coefficients must be ZZ.
640
+ RETURN: the radcal of the input ideal
641
+ EXAMPLE: example radicalZ; shows an example
642
+ "
643
+ {
644
+ if (coeffs(basering)!=ZZ) { ERROR("coefficoents must be ZZ"); }
645
+ if(size(I)==0){return(ideal(0));}
646
+ if(deg(I[1])==0)
647
+ {
648
+ ideal J=I;
649
+ }
650
+ else
651
+ {
652
+ ideal J=stdZ(I);
653
+ }
654
+ ideal K=1;
655
+ def R=basering;
656
+ list rl=ring_list(R);
657
+ int i,j,p,m;
658
+ list P;
659
+ ideal B;
660
+ if(deg(J[1])==0)
661
+ {
662
+ //=== I intersected with Z is not zero
663
+ list rp=rl;
664
+ rp[1]=0;
665
+ number q=leadcoef(J[1]);
666
+ def Rhelp=ring(rp);
667
+ setring Rhelp;
668
+ number q=imap(R,q);
669
+ //=== computes the primes occurring in a generator of I intersect Z
670
+ //list L=PollardRho(q,5000,1);
671
+ list L=primefactors(q)[1];
672
+ for(i=1;i<=size(L);i++)
673
+ {
674
+ //=== computes for all p in L the radical of IZ/p[variables]
675
+ p=int(L[i]);
676
+ setring R;
677
+ rp[1]=p;
678
+ def S=ring(rp);
679
+ setring S;
680
+ ideal J=imap(R,J);
681
+ ideal A=radical(J);
682
+ setring R;
683
+ B=imap(S,A);
684
+ kill S;
685
+ B=B,p;
686
+ B=stdZ(B);
687
+ K=stdZ(intersectZ(K,B));
688
+ //K=stdZ(intersect(K,B));
689
+ setring Rhelp;
690
+ }
691
+ setring R;
692
+ return(K);
693
+ }
694
+ //==== the ideal intersected with Z is zero
695
+ rl[1]=0;
696
+ def Rhelp=ring(rl);
697
+ setring Rhelp;
698
+ ideal J=imap(R,J);
699
+ J=std(J);
700
+ //=== the radical over Q which gives the radical
701
+ //=== of I:h for a suitable integer h
702
+ ideal K=std(radical(J));
703
+ setring R;
704
+ K=imap(Rhelp,K);
705
+ //=== intersection with Z[variables]
706
+ K=coefZ(K)[1];
707
+ //=== find h in Z such that I is the intersection of I:h and I,h
708
+ //=== and I:h =IQ[variables] intersected with Z[variables]
709
+ list H=coefZ(J);
710
+ int h=H[2];
711
+ J=J,h;
712
+ //=== call radical over Z for I,h
713
+ if(h!=1)
714
+ {
715
+ ideal M=radicalZ(J);
716
+ K=intersectZ(K,M);
717
+ //K=intersect(K,M);
718
+ }
719
+ return(K);
720
+ }
721
+ example
722
+ { "EXAMPLE:"; echo = 2;
723
+ ring R=integer,(a,b,c,d),dp;
724
+ ideal I1=9,a,b;
725
+ ideal I2=3,c;
726
+ ideal I3=11,2a,7b;
727
+ ideal I4=13a2,17b4;
728
+ ideal I5=9c5,6d5;
729
+ ideal I6=17,a15,b15,c15,d15;
730
+ ideal I=intersectZ(I1,I2);
731
+ I=intersectZ(I,I3);
732
+ I=intersectZ(I,I4);
733
+ I=intersectZ(I,I5);
734
+ I=intersectZ(I,I6);
735
+ radicalZ(I);
736
+ ideal J=intersectZ(ideal(17,a),ideal(17,a2,b));
737
+ radicalZ(J);
738
+ }
739
+
740
+ ////////////////////////////////////////////////////////////////////////////////
741
+
742
+ proc equidimZ(ideal I)
743
+ "USAGE: equidimZ(I); I ideal
744
+ The coefficients must be ZZ.
745
+ RETURN: the part of minimal height
746
+ EXAMPLE: example equidimZ; shows an example
747
+ "
748
+ {
749
+ if (coeffs(basering)!=ZZ) { ERROR("coefficoents must be ZZ"); }
750
+ if(size(I)==0){return(ideal(0));}
751
+ if(deg(I[1])==0)
752
+ {
753
+ ideal J=I;
754
+ }
755
+ else
756
+ {
757
+ ideal J=stdZ(I);
758
+ }
759
+ int he=heightZ(J);
760
+ ideal K,N;
761
+ def R=basering;
762
+ bigint s;
763
+ list rl=ring_list(R);
764
+ int i,j,p,m,ex;
765
+ list P,IS,B;
766
+ ideal Q,JJ,E;
767
+ ideal TQ=1;
768
+ if(deg(J[1])==0)
769
+ {
770
+ //=== I intersected with Z is not zero
771
+ list rp=rl;
772
+ rp[1]=0;
773
+ //=== generator of I intersect Z
774
+ number q=leadcoef(J[1]);
775
+ def Rhelp=ring(rp);
776
+ setring Rhelp;
777
+ number q=imap(R,q);
778
+ //=== computes the primes occurring in a generator of I intersect Z
779
+ //list L=PollardRho(q,5000,1);
780
+ list L=primefactors(q)[1];
781
+ list Le;
782
+ for(i=1;i<=size(L);i++)
783
+ {
784
+ L[i]=int(L[i]);
785
+ p=int(L[i]);
786
+ j=0;
787
+ s=bigint(q);
788
+ while((s mod p)==0)
789
+ {
790
+ j++;
791
+ s=s div p;
792
+ }
793
+ Le[i]=j;
794
+ }
795
+ for(i=1;i<=size(L);i++)
796
+ {
797
+ //=== computes for all p in L the minimal associated primes of
798
+ //=== IZ/p[variables]
799
+ p=int(L[i]);
800
+ j=Le[i];
801
+ setring R;
802
+ //=== maximal power of p dividing q, generator of I intersect Z
803
+ s=p^j;
804
+ rp[1]=p;
805
+ def S=ring(rp);
806
+ setring S;
807
+ ideal J=imap(R,J);
808
+ J=std(J);
809
+ if(nvars(R)-dim(J)+1==he)
810
+ {
811
+ if(j>1)
812
+ {
813
+ //=== p is of multiplicity >1 in q
814
+ list A=minAssGTZ(J);
815
+ j=0;
816
+ while(j<size(A))
817
+ {
818
+ j++;
819
+ if(dim(std(A[j]))!=nvars(R)-he+1)
820
+ {
821
+ A=delete(A,j);
822
+ j--;
823
+ }
824
+ }
825
+ setring R;
826
+ B=imap(S,A);
827
+ for(j=1;j<=size(B);j++)
828
+ {
829
+ //=== the minimal associated primes of I
830
+ K=B[j],p;
831
+ K=stdZ(K);
832
+ B[j]=K;
833
+ }
834
+ for(j=1;j<=size(B);j++)
835
+ {
836
+ K=B[j];
837
+ //=== compute maximal independent set for KZ/p[variables]
838
+ setring S;
839
+ J=imap(R,K);
840
+ J=simplify(J,2);
841
+ attrib(J,"isSB",1);
842
+ IS=Primdec::maxIndependSet(J);
843
+ setring R;
844
+ //=== computing the pseudo primary and extract it
845
+ N=J,s;
846
+ N=stdZ(N);
847
+ Q=extractZ(N,j,IS,B);
848
+ TQ=intersectZ(TQ,Q);
849
+ //TQ=intersect(TQ,Q);
850
+ }
851
+ setring Rhelp;
852
+ }
853
+ else
854
+ {
855
+ //=== p is of multiplicity 1 in q we can compute the
856
+ //=== equidimensional part directly
857
+ ideal E=equidimMax(J);
858
+ setring R;
859
+ E=imap(S,E);
860
+ E=E,p;
861
+ E=stdZ(E);
862
+ TQ=intersectZ(TQ,E);
863
+ //TQ=intersect(TQ,E);
864
+ }
865
+ }
866
+ kill S;
867
+ setring Rhelp;
868
+ }
869
+ setring R;
870
+ return(TQ);
871
+ }
872
+ //==== the ideal intersected with Z is zero
873
+ rl[1]=0;
874
+ def Rhelp=ring(rl);
875
+ setring Rhelp;
876
+ ideal J=imap(R,J);
877
+ J=std(J);
878
+ //=== the equidimensional part over Q which gives the equdimensional
879
+ //=== part of I:h for a suitable integer h
880
+ ideal E=1;
881
+ if(nvars(R)-he==dim(J))
882
+ {
883
+ E=std(equidimMax(J));
884
+ }
885
+ setring R;
886
+ E =imap(Rhelp,E);
887
+ //=== intersection with Z[variables]
888
+ E=coefZ(E)[1];
889
+ //=== find h in Z such that I is the intersection of I:h and I,h
890
+ //=== and I:h =IQ[variables] intersected with Z[variables]
891
+ int h =coefZ(J)[2];
892
+ J=J,h;
893
+ //=== call equidimensional part over Z for I,h
894
+ ideal M;
895
+ if(h!=1)
896
+ {
897
+ M=equidimZ(J);
898
+ if(he==heightZ(M))
899
+ {
900
+ E=intersectZ(M,E);
901
+ //E=intersect(M,E);
902
+ }
903
+ }
904
+ return(E);
905
+ }
906
+ example
907
+ { "EXAMPLE:"; echo = 2;
908
+ ring R=integer,(a,b,c,d),dp;
909
+ ideal I1=9,a,b;
910
+ ideal I2=3,c;
911
+ ideal I3=11,2a,7b;
912
+ ideal I4=13a2,17b4;
913
+ ideal I5=9c5,6d5;
914
+ ideal I6=17,a15,b15,c15,d15;
915
+ ideal I=intersectZ(I1,I2);
916
+ I=intersectZ(I,I3);
917
+ I=intersectZ(I,I4);
918
+ I=intersectZ(I,I5);
919
+ I=intersectZ(I,I6);
920
+ equidimZ(I);
921
+ }
922
+
923
+ ////////////////////////////////////////////////////////////////////////////////
924
+
925
+ proc intersectZ(ideal I, ideal J)
926
+ "USAGE: intersectZ(I,J); I,J ideals
927
+ The coefficients must be ZZ.
928
+ RETURN: the intersection of the input ideals
929
+ NOTE: this is an alternative to intersect(I,J) over integers,
930
+ is faster for some examples and should be kept for debug purposes.
931
+ EXAMPLE: example intersectZ; shows an example
932
+ {
933
+ if (coeffs(basering)!=ZZ) { ERROR("coefficoents must be ZZ"); }
934
+ def R = basering;
935
+ ring S=integer,( X(1..nvars(R)) ), ( dp(nvars(R)) );
936
+ ideal I = fetch(R,I);
937
+ ideal J = fetch(R,J);
938
+ ring St=integer, ( t, X(1..nvars(R)) ), ( dp(1), dp(nvars(R)) );
939
+ ideal I = imap(S,I);
940
+ ideal J = imap(S,J);
941
+ ideal K = var(1)*I+(1-var(1))*J;
942
+ K = std(K);
943
+ int i;
944
+ ideal L;
945
+ for(i=1; i<=size(K); i++)
946
+ {
947
+ if ( lead(K[i])/var(1)==0 ) { L[size(L)+1] = K[i]; }
948
+ }
949
+ setring S;
950
+ ideal L = imap(St, L);
951
+ setring R;
952
+ ideal L = fetch(S, L);
953
+ return(L);
954
+ }
955
+ example
956
+ { "EXAMPLE:"; echo = 2;
957
+ ring R=integer,(a,b,c,d),dp;
958
+ ideal I1=9,a,b;
959
+ ideal I2=3,c;
960
+ ideal I3=11,2a,7b;
961
+ ideal I4=13a2,17b4;
962
+ ideal I5=9c5,6d5;
963
+ ideal I6=17,a15,b15,c15,d15;
964
+ ideal I=intersectZ(I1,I2); I;
965
+ I=intersectZ(I,I3); I;
966
+ I=intersectZ(I,I4); I;
967
+ I=intersectZ(I,I5); I;
968
+ I=intersectZ(I,I6); I;
969
+ }
970
+
971
+ ////////////////////////////////////////////////////////////////////////////////
972
+
973
+ static proc modp(ideal J, int p, int nu)
974
+ {
975
+ //=== computes the minimal associated primes (if nu > 1) resp. the primary
976
+ //=== decomposition (else) of J in Z/p and maps the result back to the basering
977
+ def R = basering;
978
+ list rp = ring_list(R);
979
+ rp[1] = p;
980
+ def Rp = ring(rp);
981
+ setring Rp;
982
+ ideal J = imap(R,J);
983
+ int sizeA;
984
+ if(nu > 1)
985
+ {
986
+ //=== p is of multiplicity > 1 in q
987
+ list A = minAssGTZ(J);
988
+ }
989
+ else
990
+ {
991
+ list A = primdecGTZ(J);
992
+ }
993
+ sizeA = size(A);
994
+ setring R;
995
+ list A;
996
+ if (sizeA>0) { A = imap(Rp,A); }
997
+ return(list(A,p,nu));
998
+ }
999
+
1000
+ ////////////////////////////////////////////////////////////////////////////////
1001
+
1002
+ static proc coefPrimeZ(ideal I)
1003
+ {
1004
+ //=== computes the primes occurring in the product of the leading coefficients
1005
+ //=== of I
1006
+ number h=1;
1007
+ int i;
1008
+ I = simplify(I,2); // del zero generators
1009
+ for(i=1;i<=size(I);i++)
1010
+ {
1011
+ h=h*leadcoef(I[i]); // besser machen (gleich zerlegen,
1012
+ // nicht ausmultiplizieren)
1013
+ }
1014
+ def R=basering;
1015
+ ring Rhelp=0,x,dp;
1016
+ number h=imap(R,h);
1017
+ //list L=PollardRho(h,5000,1);
1018
+ list L=primefactors(h)[1];
1019
+ for(i=1;i<=size(L);i++){L[i]=int(L[i]);}
1020
+ setring R;
1021
+ return(L);
1022
+ }
1023
+
1024
+ ////////////////////////////////////////////////////////////////////////////////
1025
+
1026
+ static proc coefZ(ideal I)
1027
+ {
1028
+ //=== assume IQ[variables]=<g_1,...,g_s>, Groebner basis, g_i in Z[variables]
1029
+ //=== computes an integer h such that
1030
+ //=== <g_1,...,g_s>Z[variables]:h^infinity = IQ[variables] intersected
1031
+ //=== with Z[variables]
1032
+ //=== returns a list with IQ[variables] intersected with Z[variables] and h
1033
+ int h=1;
1034
+ int i,e;
1035
+ ideal K=1;
1036
+ attrib(I,"isSB",1);
1037
+ list L=coefPrimeZ(I);
1038
+ if(size(L)==0){return(list(I,1));}
1039
+ int d=1;
1040
+ while(d!=0)
1041
+ {
1042
+ i++;
1043
+ K=quotientOneZ(I,L[i]);
1044
+ if(size(reduce(K,I,5))!=0)
1045
+ {
1046
+ h=h*L[i];
1047
+ I=stdZ(K);
1048
+ e=1;
1049
+ }
1050
+ if(i==size(L))
1051
+ {
1052
+ i=0;
1053
+ if(e)
1054
+ {
1055
+ e=0;
1056
+ }
1057
+ else
1058
+ {
1059
+ d=0;
1060
+ }
1061
+ }
1062
+ }
1063
+ if(h<0){h=-h;}
1064
+ return(list(K,h));
1065
+ }
1066
+
1067
+ ////////////////////////////////////////////////////////////////////////////////
1068
+
1069
+ static proc specialPowerZ(ideal I, int m)
1070
+ {
1071
+ //=== computes the ideal generated by the m-th power of the generators of I
1072
+ int i;
1073
+ for(i=1;i<=ncols(I);i++) // use ncols to allow zero generators in I
1074
+ {
1075
+ I[i]=I[i]^m;
1076
+ }
1077
+ return(I);
1078
+ }
1079
+
1080
+ ////////////////////////////////////////////////////////////////////////////////
1081
+
1082
+ static proc separatorsZ(int j, list B)
1083
+ {
1084
+ //=== computes s such that s is not in B[j] but s is in B[i] for all i!=j
1085
+ int i,k;
1086
+ poly s=1;
1087
+ for(i=1;i<=size(B);i++)
1088
+ {
1089
+ if(i!=j)
1090
+ {
1091
+ for(k=1;k<=size(B[i]);k++)
1092
+ {
1093
+ if(reduce(B[i][k],B[j])!=0)
1094
+ {
1095
+ s=s*B[i][k];
1096
+ break;
1097
+ }
1098
+ }
1099
+ }
1100
+ }
1101
+ return(s);
1102
+ }
1103
+
1104
+ //////////////////////////////////////////////////////////////////////////////
1105
+ static proc extractZ(ideal J, int j, list L, list B)
1106
+ {
1107
+ //=== P is an associated prime of J, the corresponding primary ideal is
1108
+ //=== computed,
1109
+ //=== L is a list of maximal independent sets for P in Z/p[variables]
1110
+ def R=basering;
1111
+ ideal P=B[j];
1112
+
1113
+ //=== first compute a pseudo primary ideal I, radical of I is P
1114
+ //=== method of Eisenbud
1115
+ //ideal I=J+specialPowerZ(P,20);
1116
+
1117
+ //=== method of Shimoyama-Yokoyama
1118
+ poly s=separatorsZ(j,B);
1119
+ ideal I=satZ(J,s);
1120
+ //=== size(L)=0 means P is maximal ideal and I is primary
1121
+ if(size(L)>0)
1122
+ {
1123
+ if(L[1][3]!=0)
1124
+ {
1125
+ //=== if u in x is an independent set of L then we compute a Groebner
1126
+ //=== Basis in Z[u][x-u]
1127
+ ring S = create_ring(list("integer"), "("+L[1][1]+")", "lp");
1128
+ ideal I=imap(R,I);
1129
+ I=stdZ(I);
1130
+ list rl=ring_list(S);
1131
+ rl[1]=0;
1132
+ def Shelp =ring(rl);
1133
+ setring Shelp;
1134
+ ideal I=imap(S,I);
1135
+ I[1]=0;
1136
+ I=simplify(I,2);
1137
+ if(L[1][3]==nvars(basering))
1138
+ {
1139
+ list C;
1140
+ C[1]= ideal(0); //add dummy entry to tie C to current ring
1141
+ int i;
1142
+ ASSUME(1, size(I)==ncols(I) || size(I)==0);
1143
+ for(i=1;i<=size(I);i++)
1144
+ {
1145
+ C[i+1]=I[i];
1146
+ }
1147
+ }
1148
+ else
1149
+ {
1150
+ //=== this is our way to obtain the coefficients in Z[u] of the
1151
+ //=== leading terms of the Groebner basis above
1152
+ def quring=Primdec::prepareQuotientring(nvars(basering)-L[1][3],"lp");
1153
+ setring quring;
1154
+ ideal I=imap(Shelp,I);
1155
+ list C;
1156
+ C[1]= ideal(0); //add dummy entry to tie C to current ring
1157
+ int i;
1158
+ ASSUME(1, size(I)==ncols(I) || size(I)==0);
1159
+ for(i=1;i<=size(I);i++)
1160
+ {
1161
+ C[i+1]=leadcoef(I[i]);
1162
+ }
1163
+ setring Shelp;
1164
+ list C=imap(quring,C);
1165
+ }
1166
+ setring R;
1167
+ list C=imap(Shelp,C);
1168
+ }
1169
+ else
1170
+ {
1171
+ I=stdZ(I);
1172
+ list C;
1173
+ C[1]= ideal(0); //add dummy entry to tie C to current ring
1174
+ int i;
1175
+ ASSUME(1, size(I)==ncols(I) || size(I)==0);
1176
+ for(i=1;i<=size(I);i++)
1177
+ {
1178
+ C[i+1]=I[i];
1179
+ }
1180
+ list rl=ring_list(R);
1181
+ rl[1]=0;
1182
+ def Shelp =ring(rl);
1183
+ }
1184
+ poly h=1;
1185
+ for(i=2;i<=size(C);i++) // leave out first dummy entry in C.
1186
+ {
1187
+ if(deg(C[i])>0){h=h*C[i];} // das muss noch besser gemacht werden,
1188
+ // nicht ausmultiplizieren!
1189
+ }
1190
+ setring Shelp;
1191
+ poly h=imap(R,h);
1192
+ ideal fac=factorize(h,1);
1193
+ setring R;
1194
+ ideal fac=imap(Shelp,fac);
1195
+ ASSUME(1, size(fac)==ncols(fac) || size(fac)==0);
1196
+ for(i=1;i<=size(fac);i++)
1197
+ {
1198
+ I=satZ(I,fac[i]);
1199
+ }
1200
+ }
1201
+ I=stdZ(I);
1202
+ return(I);
1203
+ }
1204
+ ////////////////////////////////////////////////////////////////////////////////
1205
+
1206
+ static proc normalizeZ(ideal I)
1207
+ {
1208
+ //=== if I[1]=q in Z, it replaces all other coeffs of polys in I by there value
1209
+ //=== mod q, std should do this automatically and then this procedure should be
1210
+ //=== removed
1211
+ if(deg(I[1])>0){return(I);}
1212
+ int i,j;
1213
+ number n;
1214
+ poly p;
1215
+ for(i=2;i<=ncols(I);i++)
1216
+ {
1217
+ j=1;
1218
+ while(j<=size(I[i]))
1219
+ {
1220
+ n=leadcoef(I[i][j]) mod leadcoef(I[1]);
1221
+ p=n*leadmonom(I[i][j]);
1222
+ I[i]=I[i]-I[i][j]+p;
1223
+ if(p!=0){j++;}
1224
+ }
1225
+ }
1226
+ return(I);
1227
+ }
1228
+
1229
+ ////////////////////////////////////////////////////////////////////////////////
1230
+
1231
+ static proc satZ(ideal I,poly h)
1232
+ {
1233
+ //=== saturates I by h
1234
+ ideal J=quotientOneZ(I,h);
1235
+ while(size(reduce(J,stdZ(I),5))!=0)
1236
+ {
1237
+ I=J;
1238
+ J=quotientOneZ(I,h);
1239
+ J=normalizeZ(J);
1240
+ }
1241
+ return(J);
1242
+ }
1243
+
1244
+ ////////////////////////////////////////////////////////////////////////////////
1245
+
1246
+ static proc quotientOneZ(ideal I, poly f)
1247
+ {
1248
+ //=== this is needed because quotient(I,f) does not work properly, should be
1249
+ //=== replaced by quotient later
1250
+ if ( f==0 ) { return( ideal(1) ); }
1251
+ def R=basering;
1252
+ int i;
1253
+ ideal K=intersectZ(I,ideal(f));
1254
+ //ideal K=intersect(I,ideal(f));
1255
+ //=== K[i]/f; does not work in rings with integer! This should be replaced
1256
+ //=== later
1257
+ ring Rhelp = create_ring(0, "("+varstr(R)+")", "dp");
1258
+ ideal K=imap(R,K);
1259
+ poly f=imap(R,f);
1260
+ ASSUME(1, ncols(K)==size(K) || size(K)==0 ); // postcondition intersectZ
1261
+ for(i=1;i<=ncols(K);i++)
1262
+ {
1263
+ K[i]=K[i]/f;
1264
+ }
1265
+ setring R;
1266
+ K=imap(Rhelp,K);
1267
+ return(K);
1268
+ }
1269
+
1270
+ ////////////////////////////////////////////////////////////////////////////////
1271
+
1272
+ static proc quotientZ(ideal I, ideal J)
1273
+ {
1274
+ //=== this is needed because quotient(I,J) does not work properly, should be
1275
+ //=== replaced by quotient later
1276
+ if ( size(J)==0 ) { return( ideal(1) ); }
1277
+ J = simplify(J, 2); // del zero generators
1278
+ int i;
1279
+ ideal K=quotientOneZ(I,J[1]);
1280
+ // we had a bug here: either it is mandatory to kick out zero generators of J(done) or to use ncols(J)
1281
+ for(i=2;i<=ncols(J);i++)
1282
+ {
1283
+ K=intersectZ(K,quotientOneZ(I,J[i]));
1284
+ //K=intersect(K,quotientOneZ(I,J[i]));
1285
+ }
1286
+ return(K);
1287
+ }
1288
+
1289
+ ////////////////////////////////////////////////////////////////////////////////
1290
+
1291
+ static proc reduceZ(poly f, ideal I)
1292
+ {
1293
+ //=== this is needed because reduce(f,I) does not work properly, should be
1294
+ //=== replaced by reduce later
1295
+ if(f==0){return(f);}
1296
+ if (not attrib(I,"isSB") ) { print ("// ** I is no standard basis"); }
1297
+ def R=basering;
1298
+ ring Rhelp = create_ring(0, "("+varstr(R)+")", "dp");
1299
+ ideal I=imap(R,I);
1300
+ poly f=imap(R,f);
1301
+ int i,j;
1302
+ poly m;
1303
+ number n;
1304
+ I = simplify(I, 2); // del zero gens (otherwise the following loop may fail with an error (div by 0))
1305
+ while(!i)
1306
+ {
1307
+ i=1;
1308
+ j=0;
1309
+ while(j<size(I))
1310
+ {
1311
+ j++;
1312
+ m=leadmonom(f)/leadmonom(I[j]);
1313
+ if(m!=0)
1314
+ {
1315
+ n=leadcoef(f) mod leadcoef(I[j]);
1316
+ if(n==0)
1317
+ {
1318
+ f=f-leadcoef(f)/leadcoef(I[j])*m*I[j];
1319
+ if(f==0){setring R;return(poly(0));}
1320
+ i=0;
1321
+ break;
1322
+ }
1323
+ if(n!=leadcoef(f))
1324
+ {
1325
+ f=f+(n-leadcoef(f))/leadcoef(I[j])*m*I[j];
1326
+ i=0;
1327
+ break;
1328
+ }
1329
+ }
1330
+ }
1331
+ }
1332
+ setring R;
1333
+ f=imap(Rhelp,f);
1334
+ return(lead(f)+reduceZ(f-lead(f),I));
1335
+ }
1336
+
1337
+ ////////////////////////////////////////////////////////////////////////////////
1338
+
1339
+ static proc stdZ(ideal I)
1340
+ {
1341
+ //=== this is needed because we want the leading coefficients to be positive
1342
+ //=== otherwise reduce gives wrong results! should be replaced later by std
1343
+ I=simplify(I,2);
1344
+ I=normalizeZ(I); // why is this done before std() call?
1345
+ // normalizeZ works only if I[1] == ( std(I) )[1]
1346
+ ideal J=std(I);
1347
+ int i;
1348
+ for(i=1;i<=size(J);i++)
1349
+ {
1350
+ if(leadcoef(J[i])<0){J[i]=-J[i];}
1351
+ }
1352
+ J=normalizeZ(J);
1353
+ attrib(J,"isSB",1);
1354
+ return(J);
1355
+ }
1356
+
1357
+ ////////////////////////////////////////////////////////////////////////////////
1358
+
1359
+ static proc testPrimaryZ(ideal I, list L)
1360
+ {
1361
+ //=== test whether I is the intersection of the primary ideals in L
1362
+ int i;
1363
+ ideal K=L[1][1];
1364
+ for(i=2;i<=size(L);i++)
1365
+ {
1366
+ K=intersectZ(K,L[i][1]);
1367
+ //K=intersect(K,L[i][1]);
1368
+ }
1369
+ i=size(reduce(K,stdZ(I),5))+size(reduce(I,stdZ(K),5));
1370
+ if(!i){return(1);}
1371
+ return(0);
1372
+ }
1373
+
1374
+ ////////////////////////////////////////////////////////////////////////////////
1375
+
1376
+ static proc pseudo_primdecZM(module N)
1377
+ {
1378
+ ideal I=quotient(N,freemodule(nrows(N)));
1379
+ if(size(I)==0){return(list(list(N,I)));}
1380
+
1381
+ list B=minAssZ(I);
1382
+ list S,R,L;
1383
+ ideal K;
1384
+ if(size(B)==0){return(S);}
1385
+ for(int i=1;i<=size(B);i++)
1386
+ {
1387
+ S[i]=separatorsZ(i,B);
1388
+ }
1389
+ for(i=1;i<=size(B);i++)
1390
+ {
1391
+ L=sat_with_exp(N,S[i]);
1392
+ K[i]=S[i]^L[2];
1393
+ R[i]=list(L[1],B[i]);
1394
+ }
1395
+ L=pseudo_primdecZM(N+K*freemodule(nrows(N)));
1396
+ for(i=1;i<=size(L);i++)
1397
+ {
1398
+ R[size(R)+1]=L[i];
1399
+ }
1400
+ return(R);
1401
+ }
1402
+
1403
+
1404
+
1405
+ static proc prepare_extractZM(list L)
1406
+ {
1407
+ def R=basering;
1408
+ module N=L[1];
1409
+ ideal I=quotient(N,freemodule(nrows(N)));
1410
+ list B=primdecZ(I);
1411
+ list M;
1412
+ if(size(B)==1){return(M);}
1413
+ I=std(I);
1414
+ list rl=ring_list(R);
1415
+ if(deg(I[1])==0)
1416
+ {
1417
+ execute("int p="+string(I[1])+";");
1418
+ rl[1]=p;
1419
+ }
1420
+ else
1421
+ {
1422
+ rl[1]=0;
1423
+ }
1424
+ def Shelp =ring(rl);
1425
+ setring Shelp;
1426
+ ideal I=imap(R,I);
1427
+ I=std(I);
1428
+ M=Primdec::maxIndependSet(I);
1429
+ setring R;
1430
+ return(M);
1431
+ }
1432
+
1433
+
1434
+ static proc extractZM(list M, list L)
1435
+ {
1436
+ //=== M is a list of a pseudo primary module and the corresponding prime
1437
+ //=== L is a list of maximal independent sets for P
1438
+ def R=basering;
1439
+ ideal P=M[2];
1440
+ module I=M[1];
1441
+ poly h=1;
1442
+
1443
+ //=== size(L)=0 means P is maximal ideal and I is primary
1444
+ if(size(L)>0)
1445
+ {
1446
+ if(L[1][3]!=0)
1447
+ {
1448
+ //=== if u in x is an independent set of L then we compute a Groebner
1449
+ //=== Basis in Z[u][x-u]
1450
+ ring S = create_ring(list("integer"), "("+L[1][1]+")", "lp");
1451
+ module I=imap(R,I);
1452
+ I=std(I);
1453
+ list rl=ring_list(S);
1454
+ rl[1]=0;
1455
+ def Shelp =ring(rl);
1456
+ setring Shelp;
1457
+ module I=imap(S,I);
1458
+ //=== this is our way to obtain the coefficients in Z[u] of the
1459
+ //=== leading terms of the Groebner basis above
1460
+ def quring=Primdec::prepareQuotientring(nvars(basering)-L[1][3],"lp");
1461
+ setring quring;
1462
+ module I=imap(Shelp,I);
1463
+ list C;
1464
+ int i;
1465
+ for(i=1;i<=size(I);i++)
1466
+ {
1467
+ C[i]=leadcoef(I[i]);
1468
+ }
1469
+ setring Shelp;
1470
+ list C=imap(quring,C);
1471
+ setring R;
1472
+ list C=imap(Shelp,C);
1473
+ }
1474
+ else
1475
+ {
1476
+ // this is the case that P=<p>, p prime
1477
+ I=std(I);
1478
+ ideal IC=simplify(flatten(lead(I)),2);
1479
+ list C;
1480
+ int i;
1481
+ for(i=1;i<=size(IC);i++)
1482
+ {
1483
+ C[i]=I[i];
1484
+ }
1485
+ list rl=ring_list(R);
1486
+ rl[1]=0;
1487
+ def Shelp =ring(rl);
1488
+ }
1489
+ for(i=1;i<=size(C);i++)
1490
+ {
1491
+ if(deg(C[i])>0){h=h*C[i];} // das muss noch besser gemacht werden,
1492
+ // nicht ausmultiplizieren!
1493
+ }
1494
+ setring Shelp;
1495
+ poly h=imap(R,h);
1496
+ ideal fac=factorize(h,1);
1497
+ setring R;
1498
+ list II;
1499
+ h=1;
1500
+ ideal fac=imap(Shelp,fac);
1501
+ ASSUME(1, size(fac)==ncols(fac) || size(fac)==0);
1502
+ for(i=1;i<=size(fac);i++)
1503
+ {
1504
+ II=sat_with_exp(I,fac[i]);
1505
+ I=II[1];
1506
+ h=h*fac[i]^II[2];
1507
+ }
1508
+ }
1509
+ I=std(I);
1510
+ return(list(I,h));
1511
+ }
1512
+
1513
+
1514
+ proc primdecZM(module N)
1515
+ "USAGE: primdecZM(N); N module
1516
+ The coefficients must be ZZ.
1517
+ RETURN: a list pr of primary modules and their associated primes:
1518
+ @format
1519
+ pr[i][1] the i-th primary component,
1520
+ pr[i][2] the i-th prime component.
1521
+ @end format
1522
+ EXAMPLE: example primdecZM; shows an example
1523
+ "
1524
+ {
1525
+ list P,K,S;
1526
+ int i,j;
1527
+ list L=pseudo_primdecZM(N);
1528
+ list M,O;
1529
+ for(i=1;i<=size(L);i++)
1530
+ {
1531
+ if(size(L[i][2])!=0)
1532
+ {
1533
+ M=prepare_extractZM(L[i]);
1534
+ O=extractZM(L[i],M);
1535
+ P[size(P)+1]=list(O[1],L[i][2]);
1536
+ K[size(K)+1]=L[i][1]+O[2]*freemodule(nrows(L[i][1]));
1537
+ }
1538
+ else
1539
+ {
1540
+ P[size(P)+1]=L[i];
1541
+ }
1542
+ }
1543
+ for(j=1;j<=size(K);j++)
1544
+ {
1545
+ S=primdecZM(K[j]);
1546
+ for(i=1;i<=size(S);i++)
1547
+ {
1548
+ P[size(P)+1]=S[i];
1549
+ }
1550
+ }
1551
+ return(P);
1552
+ }
1553
+ example
1554
+ { "EXAMPLE:"; echo = 2;
1555
+ ring R=integer,(x,y),(c,lp);
1556
+ module N=[0,0,xy2-x2-xy],[0,y,x],[0,x,2xy-x],[x,0,-xy],[0,0,18x];
1557
+ primdecZM(N);
1558
+ }
1559
+
1560
+
1561
+ ////////////////////////////////////////////////////////////////////////////////
1562
+
1563
+ /*
1564
+ Examples:
1565
+
1566
+ //=== IQ[a,b,c,d,e,f,g] intersect Z[a,b,c,d,e,f,g] = I (takes some time)
1567
+ ring R1=integer,(a,b,c,d,e,f,g),dp;
1568
+ ideal I=a2+2de+2cf+2bg+a,
1569
+ 2ab+e2+2df+2cg+b,
1570
+ b2+2ac+2ef+2dg+c,
1571
+ 2bc+2ad+f2+2eg+d,
1572
+ c2+2bd+2ae+2fg+e,
1573
+ 2cd+2be+2af+g2+f,
1574
+ d2+2ce+2bf+2ag+g;
1575
+
1576
+ ring R2=integer,(a,b,c,d,e,f,g),dp;
1577
+ ideal I=181*32003,
1578
+ a2+2de+2cf+2bg+a,
1579
+ 2ab+e2+2df+2cg+b,
1580
+ b2+2ac+2ef+2dg+c,
1581
+ 2bc+2ad+f2+2eg+d,
1582
+ c2+2bd+2ae+2fg+e,
1583
+ 2cd+2be+2af+g2+f,
1584
+ d2+2ce+2bf+2ag+g;
1585
+
1586
+ ring R3=integer,(w,z,y,x),dp;
1587
+ ideal I=xzw+(-y^2+y)*z^2,
1588
+ (-x^2+x)*w^2+yzw,
1589
+ ((y^4-2*y^3+y^2)*x-y^4+y^3)*z^3,
1590
+ y2z2w+(-y*4+2*y^3-y^2)*z3;
1591
+
1592
+ ring R4=integer,(w,z,y,x),dp;
1593
+ ideal I=-2*yxzw+(-yx-y^2+y)*z^2,
1594
+ xw^2-yz^2,
1595
+ (yx^2-(2*y^2+2*y)*x+y^3-2*y^2+y)*z^3,
1596
+ (-2*y^2+2*y)*z^2*w+(yx-3*y^2-y)*z^3;
1597
+
1598
+ ring R5=integer,(x,y,z),dp;
1599
+ ideal I=x2-y2-z2,
1600
+ xy-z2,
1601
+ y3+xz2-yz2+2z3+xy-z2,
1602
+ -y2z2+2z4+x2-y2+z2,
1603
+ y3z9+3y2z10+3yz11+z12-y2z2+2z4;
1604
+
1605
+ ring R6=integer,(h, l, s, x, y, z),dp; //takes some time
1606
+ ideal I=hl-l2-4ls+hy,
1607
+ h2s-6ls3+h2z,
1608
+ xh2-l2s-h3;
1609
+
1610
+ ring R7=integer,(x,y,z),dp;
1611
+ ideal I=x2-y2-(z+2)^2,
1612
+ xy-(z+2)^2,
1613
+ y3+x*(z+2)^2-y*(z+2)^2+2*(z+2)^3+xy-(z+2)^2,
1614
+ -y^2*(z+2)^2+2*(z+2)^4+x2-y2+(z+2)^2,
1615
+ y3z9+3y2z10+3yz11+z12-y2z2+2z4;
1616
+
1617
+ ring R8=integer,(x,y,z),dp;
1618
+ ideal I=x2-y2-(z+2)^2,
1619
+ xy-(z+2)^2,
1620
+ y3+x*(z+2)^2-y*(z+2)^2+2*(z+2)^3+xy-(z+2)^2,
1621
+ -y^2*(z+2)^2+2*(z+2)^4+x2-y2+(z+2)^2,
1622
+ y3z9+3y2z10+3yz11+z12-y2z2+2z4;
1623
+
1624
+ ring R9=integer,(w,z,y,x),dp;
1625
+ ideal I=630,
1626
+ ((y^2-y)*x-y^3+y^2)*z^2,
1627
+ (x-y)*zw,
1628
+ (x-y^2)*zw+(-y^2+y)*z^2,
1629
+ (-x^2+x)*w^2+(-yx+y)*zw;
1630
+
1631
+ ring R10=integer,(w,z,y,x),dp;
1632
+ ideal I=1260,
1633
+ -yxzw+(-y^2+y)*z^2,
1634
+ (-x^2+x)*w^2-yxzw,
1635
+ ((-y^2+y)*x-y^3+2*y^2-y)*z^3,
1636
+ (y^2-y)*z^2*w+(-y^2+y)*z^2*w+(-y^2+y)*z^3;
1637
+
1638
+ ring R11=integer,(w,z,y,x),dp;
1639
+ ideal I=(4*y^2*x^2+(4*y^3+4*y^2-y)*x-y^2-y)*z^2,
1640
+ (x+y+1)*zw+(-4*y^2*x-4*y^3-4*y^2)*z^2,
1641
+ (-x-2*y^2 - 2*y - 1)*zw + (8*y^3*x + 8*y^4 + 8*y^3 + 2*y^2+y)*z^2,
1642
+ ((y^3 + y^2)*x - y^2 - y)*z^2,
1643
+ (y +1)*zw + (-y^3 -y^2)*z^2,
1644
+ (x + 1)*zw +(- y^2 -y)*z^2,
1645
+ (x^2 +x)*w^2 + (-yx - y)*zw;
1646
+
1647
+ ring R12=integer,(w,z,y,x),dp;
1648
+ ideal I=72,
1649
+ ((y^3 + y^2)*x - y^2 - y)*z^2,
1650
+ (y + 1)*zw + (-y^3 -y^2)*z^2,
1651
+ (x + 1)*zw + (-y^2 -y)*z^2, (x^2 + x)*w^2 + (-yx - y)*zw;
1652
+
1653
+ ring R13=integer,(w,z,y,x),dp;
1654
+ ideal I=(((12*y+8)*x^2 +(2*y+2)*x)*zw +((-15*y^2 -4*y)*x-4*y^2 -y)*z^2,
1655
+ -x*w^2 +((-12*y -8)*x+2*y)*zw +(15*y^2+4*y)*z^2,
1656
+ (81*y^4*x^2 +(-54*y^3 -12*y^2)*x-12*y^3 -3*y^2)*z^3,
1657
+ (-24*yx+6*y^2-6*y)*z^2*w + (-81*y^4*x + 81*y^3 + 24*y^2)*z^3,
1658
+ (48*x^2 + (-30*y + 12)*x - 6*y)*z^2*w + ((81*y^3 -54*y^2 -24*y)*x
1659
+ -21*y^2 -6*y)*z^3,
1660
+ (-96*yx-18*y^3 +18*y^2-24*y)*z^2*w +(243*y^5*x-243*y^4 +72*y^3
1661
+ +48*y^2)*z^3,
1662
+ 6*y*z^2*w^2 +((576*y+384)*x^2 + (-81*y^3 -306*y^2 -168*y+96)*x+81*y^2
1663
+ -18*y)*z^3*w +((-720*y^2 - 192*y)*x + 450*y^3 - 60*y^2 - 48*y)*z^4);
1664
+
1665
+ ring R14=integer,(x(1),x(2),x(3),x(4)),dp;
1666
+ ideal I=181*49^2,
1667
+ x(4)^4,
1668
+ x(1)*x(4)^3,
1669
+ x(1)*x(2)*x(4)^2,
1670
+ x(2)^2*x(4)^2,
1671
+ x(2)^2*x(3)*x(4),
1672
+ x(1)*x(2)*x(3)*x(4),
1673
+ x(1)*x(3)^2*x(4),
1674
+ x(3)^3*x(4);
1675
+
1676
+
1677
+ ring R15=integer,(x,y,z),dp;
1678
+ ideal I=32003*181*64,
1679
+ ((z^2-z)*y^2 + (z^2 -z)*y)*x; (z*y^3 + z*y^2)*x,
1680
+ (y^4 - y^2)*x, (z^2 - z)*y*x^2, (y^3 - y^2)*x^2,
1681
+ (z^3 - z^2)*x^4 + (2*z^3 -2*z^2)*x^3 + (z^3 -z^2)*x^2,
1682
+ z*y^2*x^2, z*y*x^4 +z*y*x^3,
1683
+ 2*y^2*x^4 +6*y^2*x^3 +6*y^2*x^2 + (y^3 +y^2)*x, z*x^5 + (z^2 +z)*x^4
1684
+ + (2*z^2 -z)*x^3 + (z^2 -z)*x^2,
1685
+ y*x^6 + 3*y*x^5 + 3*y*x^4 + y*x^3;
1686
+
1687
+
1688
+ ring R16=integer,(x(1),x(2),x(3),x(4),x(5)),dp;
1689
+ ideal I=x(5)^5,
1690
+ x(1)*x(5)^4,
1691
+ x(1)*x(2)*x(5)^3,
1692
+ x(2)^2*x(5)^3,
1693
+ x(2)^2*x(3)*x(5)^2,
1694
+ x(1)*x(2)*x(3)*x(5)^2,
1695
+ x(1)*x(3)^2*x(5)^2,
1696
+ x(3)^3*x(5)^2,
1697
+ x(3)^3*x(4)*x(5),
1698
+ x(1)*x(3)^2*x(4)*x(5),
1699
+ x(1)*x(2)*x(3)*x(4)*x(5),
1700
+ x(2)^2*x(3)*x(4)*x(5),
1701
+ x(2)^2*x(4)^2*x(5),
1702
+ x(1)*x(2)*x(4)^2*x(5),
1703
+ x(1)*x(4)^3*x(5),
1704
+ x(4)^4*x(5);
1705
+ I=intersectZ(I,ideal(64*181,x(1)^2));
1706
+
1707
+ ring R17=integer,(x,y,z),dp;
1708
+ ideal I=374,
1709
+ (z+2)^8-140z6+2622*(z+2)^4-1820*(z+2)^2+169,
1710
+ 17y*(z+2)^4-374*y*(z+2)^2+221y+2z7-281z5+5240z3-3081z,
1711
+ 204y2+136yz3-3128yz+z6-149z4+2739z2+117,
1712
+ 17xz4-374xz2+221x+2z7-281z5+5240z3-3081z,
1713
+ 136xy-136xz-136yz+2z6-281z4+5376z2-3081,
1714
+ 204x2+136xz3-3128xz+z6-149z4+2739z2+117;
1715
+
1716
+ ring R18=integer,(B,D,F,b,d,f),dp;
1717
+ ideal I=6,
1718
+ (b-d)*(B-D)-2*F+2,
1719
+ (b-d)*(B+D-2*F)+2*(B-D),
1720
+ (b-d)^2-2*(b+d)+f+1,
1721
+ B^2*b^3-1,
1722
+ D^2*d^3-1,
1723
+ F^2*f^3-1;
1724
+
1725
+ ring R19=integer,(a,b,c,d,e,f),dp;
1726
+ ideal I=24,
1727
+ 2*(f+2)*b+2ec+d2+a2+a,
1728
+ 2*(f+2)*c+2ed+2ba+b,
1729
+ 2*(f+2)*d+e2+2ca+c+b2,
1730
+ 2*(f+2)*e+2da+d+2cb,
1731
+ (f+2)^2+2ea+e+2db+c2,
1732
+ 2*(f+2)*a+f+2eb+2dc;
1733
+
1734
+ ring R20=integer,(x,y,z,w,u),dp;
1735
+ ideal I=24,
1736
+ 2x2-2y2+2z2-2w2+2u2-1,
1737
+ 2x3-2y3+2z3-2w3+2u3-1,
1738
+ 2x4-2y4+2z4-2w4+2u4-1,
1739
+ 2x5-2y5+2z5-2w5+2u5-1,
1740
+ 2x6-2y6+2z6-2w6+2u6-1;
1741
+
1742
+ ring R21=integer,(x,y,z,t,u,v,h),dp;
1743
+ ideal I=66,
1744
+ 2x2+2y2+2z2+2t2+2u2+v2-vh,
1745
+ xy+yz+2zt+2tu+2uv-uh,
1746
+ 2xz+2yt+2zu+u2+2tv-th,
1747
+ 2xt+2yu+2tu+2zv-zh,
1748
+ t2+2xv+2yv+2zv-yh,
1749
+ 2x+2y+2z+2t+2u+v-h,
1750
+ x3+y3+z3+t3+u3+v3;
1751
+
1752
+ ring R22=integer,(s,p,S,P,T,F,f),dp;
1753
+ ideal I=35,
1754
+ 2*T-S*s-2*F+2,
1755
+ 8*F*p-4*p*S-2*F*s^2+S*s^2+4*T-2*S*s,
1756
+ -2*s-4*p+s^2+f+1,
1757
+ s*T^2-p*s*P-p*S*T-2,
1758
+ p^3*P^2-1,
1759
+ F^2*f^3-1;
1760
+
1761
+ ring R=integer,(x,y),(c,lp);
1762
+ module N=[0,0,xy2-x2-xy],[0,y,x],[0,x,2xy-x],[x,0,-xy],[0,0,18x];
1763
+
1764
+ ring R=integer,(x,y),(c,lp);
1765
+ module N=[0,0,xy2-x2-xy],[0,y,x],[0,x,2xy-x],[x,0,-xy],[0,0,18];
1766
+
1767
+ ring R=integer,(x,y),(c,lp);
1768
+ module N=[-y,7,0],[2y3-y2],[3x,y2],[2y-y2,x],[4,5x3];
1769
+
1770
+ ring r=integer,(x,y),(c,lp);
1771
+ module N=[0,0,xy2-x2-xy],[0,y,x],[0,x,xy-x],[x,0,-xy],[5x,0,0];
1772
+
1773
+ ring R2=integer,(a(1),a(2),a(3),b(1),b(2),b(3)),(c,lp);
1774
+ module N=[a(1)*b(1),a(2)*b(1),a(3)*b(1)],[a(1)*b(2),a(2)*b(2),a(3)*b(2)],[a(1)*b(3),a(2)*b(3),a(3)*b(3)];
1775
+
1776
+ ring R3=integer,(x,y,z),(c,lp);
1777
+ module N=[y2+z2,xy,xz],[xy,x2+z2,yz],[xz,yz,x2+y2];
1778
+
1779
+ ring R4=integer,(x,y,z,a,b,c),(c,lp);
1780
+ module N=[x3y2z2c,x2y3z2c,x2y2z3c],[x3y2z2b,x2y3z2b,x2y2z3b],[x3y2z2a,x2y3z2a,x2y2z3a];
1781
+
1782
+ */