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,1094 @@
1
+ ////////////////////////////////////////////////////////////////////////////
2
+ version="version sing.lib 4.4.0.0 Nov_2023 "; // $Id: c46a2bbc5ff6705e99a87ff038f7854abe8b1282 $
3
+ category="Singularities";
4
+ info="
5
+ LIBRARY: sing.lib Invariants of Singularities
6
+ AUTHORS: Gert-Martin Greuel, email: greuel@mathematik.uni-kl.de @*
7
+ Bernd Martin, email: martin@math.tu-cottbus.de
8
+
9
+ PROCEDURES:
10
+ codim(id1, id2); vector space dimension of id2/id1 if finite
11
+ deform(i); infinitesimal deformations of ideal i
12
+ dim_slocus(i); dimension of singular locus of ideal i
13
+ is_active(f,id); is polynomial f an active element mod id? (id ideal/module)
14
+ is_ci(i); is ideal i a complete intersection?
15
+ is_is(i); is ideal i an isolated singularity?
16
+ is_reg(f,id); is polynomial f a regular element mod id? (id ideal/module)
17
+ is_regs(i[,id]); are gen's of ideal i regular sequence modulo id?
18
+ locstd(i); SB for local degree ordering without cancelling units
19
+ milnor(i); milnor number of ideal i; (assume i is ICIS in nf)
20
+ nf_icis(i); generic combinations of generators; get ICIS in nf
21
+ slocus(i); ideal of singular locus of ideal i
22
+ qhspectrum(f,w); spectrum numbers of w-homogeneous polynomial f
23
+ Tjurina(i); SB of Tjurina module of ideal i (assume i is ICIS)
24
+ tjurina(i); Tjurina number of ideal i (assume i is ICIS)
25
+ T_1(i); T^1-module of ideal i
26
+ T_2((i); T^2-module of ideal i
27
+ T_12(i); T^1- and T^2-module of ideal i
28
+ tangentcone(id); compute tangent cone of id
29
+
30
+ ";
31
+
32
+ LIB "inout.lib";
33
+ LIB "random.lib";
34
+ LIB "primdec.lib";
35
+ ///////////////////////////////////////////////////////////////////////////////
36
+
37
+ proc deform (ideal id)
38
+ "USAGE: deform(id); id=ideal or poly
39
+ RETURN: matrix, columns are kbase of infinitesimal deformations
40
+ EXAMPLE: example deform; shows an example
41
+ "
42
+ {
43
+ list L=T_1(id,"");
44
+ def K=L[1]; attrib(K,"isSB",1);
45
+ return(matrix(L[2])*matrix(kbase(K)));
46
+ }
47
+ example
48
+ { "EXAMPLE:"; echo = 2;
49
+ ring r = 32003,(x,y,z),ds;
50
+ ideal i = xy,xz,yz;
51
+ matrix T = deform(i);
52
+ print(T);
53
+ print(deform(x3+y5+z2));
54
+ }
55
+ ///////////////////////////////////////////////////////////////////////////////
56
+
57
+ proc dim_slocus (ideal i)
58
+ "USAGE: dim_slocus(i); i ideal or poly
59
+ RETURN: dimension of singular locus of i
60
+ EXAMPLE: example dim_slocus; shows an example
61
+ "
62
+ {
63
+ return(dim(std(slocus(i))));
64
+ }
65
+ example
66
+ { "EXAMPLE:"; echo = 2;
67
+ ring r = 32003,(x,y,z),ds;
68
+ ideal i = x5+y6+z6,x2+2y2+3z2;
69
+ dim_slocus(i);
70
+ }
71
+ ///////////////////////////////////////////////////////////////////////////////
72
+
73
+ proc is_active (poly f,def id)
74
+ "USAGE: is_active(f,id); f poly, id ideal or module
75
+ RETURN: 1 if f is an active element modulo id (i.e. dim(id)=dim(id+f*R^n)+1,
76
+ if id is a submodule of R^n) resp. 0 if f is not active.
77
+ The basering may be a quotient ring
78
+ NOTE: regular parameters are active but not vice versa (id may have embedded
79
+ components). proc is_reg tests whether f is a regular parameter
80
+ EXAMPLE: example is_active; shows an example
81
+ "
82
+ {
83
+ if( size(id)==0 ) { return(1); }
84
+ if( typeof(id)=="ideal" ) { ideal m=f; }
85
+ if( typeof(id)=="module" ) { module m=f*freemodule(nrows(id)); }
86
+ return(dim(std(id))-dim(std(id+m)));
87
+ }
88
+ example
89
+ { "EXAMPLE:"; echo = 2;
90
+ ring r =32003,(x,y,z),ds;
91
+ ideal i = yx3+y,yz3+y3z;
92
+ poly f = x;
93
+ is_active(f,i);
94
+ qring q = std(x4y5);
95
+ poly f = x;
96
+ module m = [yx3+x,yx3+y3x];
97
+ is_active(f,m);
98
+ }
99
+ ///////////////////////////////////////////////////////////////////////////////
100
+
101
+ proc is_ci (ideal i)
102
+ "USAGE: is_ci(i); i ideal
103
+ RETURN: intvec = sequence of dimensions of ideals (j[1],...,j[k]), for
104
+ k=1,...,size(j), where j is minimal base of i. i is a complete
105
+ intersection if last number equals nvars-size(i)
106
+ NOTE: dim(0-ideal) = -1. You may first apply simplify(i,10); in order to
107
+ delete zeroes and multiples from set of generators
108
+ printlevel >=0: display comments (default)
109
+ EXAMPLE: example is_ci; shows an example
110
+ "
111
+ {
112
+ int n; intvec dimvec; ideal id;
113
+ i=minbase(i);
114
+ int s = ncols(i);
115
+ int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
116
+ //--------------------------- compute dimensions ------------------------------
117
+ for( n=1; n<=s; n=n+1 )
118
+ {
119
+ id = i[1..n];
120
+ dimvec[n] = dim(std(id));
121
+ }
122
+ n = dimvec[s];
123
+ //--------------------------- output ------------------------------------------
124
+ if( n+s != nvars(basering) )
125
+ { dbprint(p,"// no complete intersection"); }
126
+ if( n+s == nvars(basering) )
127
+ { dbprint(p,"// complete intersection of dim "+string(n)); }
128
+ dbprint(p,"// dim-sequence:");
129
+ return(dimvec);
130
+ }
131
+ example
132
+ { "EXAMPLE:"; echo = 2;
133
+ int p = printlevel;
134
+ printlevel = 1; // display comments
135
+ ring r = 32003,(x,y,z),ds;
136
+ ideal i = x4+y5+z6,xyz,yx2+xz2+zy7;
137
+ is_ci(i);
138
+ i = xy,yz;
139
+ is_ci(i);
140
+ printlevel = p;
141
+ }
142
+ ///////////////////////////////////////////////////////////////////////////////
143
+
144
+ proc is_is (ideal i)
145
+ "USAGE: is_is(id); id ideal or poly
146
+ RETURN: intvec = sequence of dimensions of singular loci of ideals
147
+ generated by id[1]..id[i], k = 1..size(id); @*
148
+ dim(0-ideal) = -1;
149
+ id defines an isolated singularity if last number is 0
150
+ NOTE: printlevel >=0: display comments (default)
151
+ EXAMPLE: example is_is; shows an example
152
+ "
153
+ {
154
+ int l; intvec dims; ideal j;
155
+ int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
156
+ //--------------------------- compute dimensions ------------------------------
157
+ for( l=1; l<=ncols(i); l=l+1 )
158
+ {
159
+ j = i[1..l];
160
+ dims[l] = dim(std(slocus(j)));
161
+ }
162
+ dbprint(p,"// dim of singular locus = "+string(dims[size(dims)]),
163
+ "// isolated singularity if last number is 0 in dim-sequence:");
164
+ return(dims);
165
+ }
166
+ example
167
+ { "EXAMPLE:"; echo = 2;
168
+ int p = printlevel;
169
+ printlevel = 1;
170
+ ring r = 32003,(x,y,z),ds;
171
+ ideal i = x2y,x4+y5+z6,yx2+xz2+zy7;
172
+ is_is(i);
173
+ poly f = xy+yz;
174
+ is_is(f);
175
+ printlevel = p;
176
+ }
177
+ ///////////////////////////////////////////////////////////////////////////////
178
+
179
+ proc is_reg (poly f,def id)
180
+ "USAGE: is_reg(f,id); f poly, id ideal or module
181
+ RETURN: 1 if multiplication with f is injective modulo id, 0 otherwise
182
+ NOTE: Let R be the basering and id a submodule of R^n. The procedure checks
183
+ injectivity of multiplication with f on R^n/id. The basering may be a
184
+ quotient ring.
185
+ EXAMPLE: example is_reg; shows an example
186
+ "
187
+ {
188
+ if( f==0 ) { return(0); }
189
+ int d,ii;
190
+ def q = quotient(id,ideal(f));
191
+ id=std(id);
192
+ d=size(q);
193
+ for( ii=1; ii<=d; ii=ii+1 )
194
+ {
195
+ if( reduce(q[ii],id)!=0 )
196
+ { return(0); }
197
+ }
198
+ return(1);
199
+ }
200
+ example
201
+ { "EXAMPLE:"; echo = 2;
202
+ ring r = 32003,(x,y),ds;
203
+ ideal i = x8,y8;
204
+ ideal j = (x+y)^4;
205
+ i = intersect(i,j);
206
+ poly f = xy;
207
+ is_reg(f,i);
208
+ }
209
+ ///////////////////////////////////////////////////////////////////////////////
210
+
211
+ proc is_regs (ideal i, list #)
212
+ "USAGE: is_regs(i[,id]); i poly, id ideal or module (default: id=0)
213
+ RETURN: 1 if generators of i are a regular sequence modulo id, 0 otherwise
214
+ NOTE: Let R be the basering and id a submodule of R^n. The procedure checks
215
+ injectivity of multiplication with i[k] on R^n/id+i[1..k-1].
216
+ The basering may be a quotient ring.
217
+ printlevel >=0: display comments (default)
218
+ printlevel >=1: display comments during computation
219
+ EXAMPLE: example is_regs; shows an example
220
+ "
221
+ {
222
+ int d,ii,r;
223
+ int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
224
+ if( size(#)==0 ) { ideal id; }
225
+ else { def id=#[1]; }
226
+ if( size(i)==0 ) { return(0); }
227
+ d=size(i);
228
+ if( typeof(id)=="ideal" ) { ideal m=1; }
229
+ if( typeof(id)=="module" ) { module m=freemodule(nrows(id)); }
230
+ for( ii=1; ii<=d; ii=ii+1 )
231
+ {
232
+ if( p>=2 )
233
+ { "// checking whether element",ii,"is regular mod 1 ..",ii-1; }
234
+ if( is_reg(i[ii],id)==0 )
235
+ {
236
+ dbprint(p,"// elements 1.."+string(ii-1)+" are regular, " +
237
+ string(ii)+" is not regular mod 1.."+string(ii-1));
238
+ return(0);
239
+ }
240
+ id=id+i[ii]*m;
241
+ }
242
+ if( p>=1 ) { "// elements are a regular sequence of length",d; }
243
+ return(1);
244
+ }
245
+ example
246
+ { "EXAMPLE:"; echo = 2;
247
+ int p = printlevel;
248
+ printlevel = 1;
249
+ ring r1 = 32003,(x,y,z),ds;
250
+ ideal i = x8,y8,(x+y)^4;
251
+ is_regs(i);
252
+ module m = [x,0,y];
253
+ i = x8,(x+z)^4;;
254
+ is_regs(i,m);
255
+ printlevel = p;
256
+ }
257
+ ///////////////////////////////////////////////////////////////////////////////
258
+
259
+ proc milnor (ideal i)
260
+ "USAGE: milnor(i); i ideal or poly
261
+ RETURN: Milnor number of i, if i is ICIS (isolated complete intersection
262
+ singularity) in generic form, resp. -1 if not
263
+ NOTE: use proc nf_icis to put generators in generic form
264
+ printlevel >=1: display comments
265
+ EXAMPLE: example milnor; shows an example
266
+ "
267
+ {
268
+ i = simplify(i,10); //delete zeroes and multiples from set of generators
269
+ int n = size(i);
270
+ int l,q,m_nr; ideal t; intvec disc;
271
+ int p = printlevel-voice+2; // p=printlevel+1 (default: p=0)
272
+ //---------------------------- hypersurface case ------------------------------
273
+ if( n==1 or n==0 )
274
+ {
275
+ i = std(jacob(i[1]));
276
+ m_nr = vdim(i);
277
+ if( m_nr<0 and p>=1 ) { "// Milnor number is infinite"; }
278
+ return(m_nr);
279
+ }
280
+ //------------ isolated complete intersection singularity (ICIS) --------------
281
+ for( l=n; l>0; l=l-1)
282
+ { t = minor(jacob(i),l);
283
+ i[l] = 0;
284
+ q = vdim(std(i+t));
285
+ disc[l]= q;
286
+ if( q ==-1 )
287
+ { if( p>=1 )
288
+ { "// not in generic form or no ICIS; use proc nf_icis to put";
289
+ "// generators in generic form and then try milnor again!"; }
290
+ return(q);
291
+ }
292
+ m_nr = q-m_nr;
293
+ }
294
+ //---------------------------- change sign ------------------------------------
295
+ if (m_nr < 0) { m_nr=-m_nr; }
296
+ if( p>=1 ) { "//sequence of discriminant numbers:",disc; }
297
+ return(m_nr);
298
+ }
299
+ example
300
+ { "EXAMPLE:"; echo = 2;
301
+ int p = printlevel;
302
+ printlevel = 2;
303
+ ring r = 32003,(x,y,z),ds;
304
+ ideal j = x5+y6+z6,x2+2y2+3z2,xyz+yx;
305
+ milnor(j);
306
+ poly f = x7+y7+(x-y)^2*x2y2+z2;
307
+ milnor(f);
308
+ printlevel = p;
309
+ }
310
+ ///////////////////////////////////////////////////////////////////////////////
311
+
312
+ proc nf_icis (ideal i)
313
+ "USAGE: nf_icis(i); i ideal
314
+ RETURN: ideal = generic linear combination of generators of i if i is an ICIS
315
+ (isolated complete intersection singularity), return i if not
316
+ NOTE: this proc is useful in connection with proc milnor
317
+ printlevel >=0: display comments (default)
318
+ EXAMPLE: example nf_icis; shows an example
319
+ "
320
+ {
321
+ i = simplify(i,10); //delete zeroes and multiples from set of generators
322
+ int p,b = 100,0;
323
+ int n = size(i);
324
+ matrix mat=freemodule(n);
325
+ int P = printlevel-voice+3; // P=printlevel+1 (default: P=1)
326
+ //---------------------------- test: complete intersection? -------------------
327
+ intvec sl = is_ci(i);
328
+ if( n+sl[n] != nvars(basering) )
329
+ {
330
+ dbprint(P,"// no complete intersection");
331
+ return(i);
332
+ }
333
+ //--------------- test: isolated singularity in generic form? -----------------
334
+ sl = is_is(i);
335
+ if ( sl[n] != 0 )
336
+ {
337
+ dbprint(P,"// no isolated singularity");
338
+ return(i);
339
+ }
340
+ //------------ produce generic linear combinations of generators --------------
341
+ int prob;
342
+ while ( sum(sl) > 0 )
343
+ { prob=prob+1;
344
+ p=p-25; b=b+10;
345
+ i = genericid(i,p,b); // proc genericid from random.lib
346
+ sl = is_is(i);
347
+ }
348
+ dbprint(P,"// ICIS in generic form after "+string(prob)+" genericity loop(s)");
349
+ return(i);
350
+ }
351
+ example
352
+ { "EXAMPLE:"; echo = 2;
353
+ int p = printlevel;
354
+ printlevel = 1;
355
+ ring r = 32003,(x,y,z),ds;
356
+ ideal i = x3+y4,z4+yx;
357
+ nf_icis(i);
358
+ ideal j = x3+y4,xy,yz;
359
+ nf_icis(j);
360
+ printlevel = p;
361
+ }
362
+ ///////////////////////////////////////////////////////////////////////////////
363
+
364
+ proc slocus(ideal i)
365
+ "USAGE: slocus(i); i ideal
366
+ RETURN: ideal of singular locus of i. Quotient rings and rings with integer coefficients are currently not supported.
367
+ EXAMPLE: example slocus; shows an example
368
+ "
369
+ {
370
+ // quotient rings currently not supported
371
+ ASSUME( 0, 0==isQuotientRing(basering) );
372
+ // integer coefficient rings currently not supported
373
+ ASSUME( 0, hasFieldCoefficient(basering) );
374
+
375
+
376
+ def R=basering;
377
+ int j,k;
378
+ ideal res;
379
+
380
+ if(ord_test(basering)!=1)
381
+ {
382
+ string va=varstr(basering);
383
+ if( size( parstr(basering))>0){va=va+","+parstr(basering);}
384
+ execute ("ring S = ("+charstr(basering)+"),("+va+"),dp;");
385
+ ideal i=imap(R,i);
386
+ list l=equidim(i);
387
+ setring R;
388
+ list l=imap(S,l);
389
+ }
390
+ else
391
+ {
392
+ list l=equidim(i);
393
+ }
394
+ int n=size(l);
395
+ if (n==1){return(slocusEqi(i));}
396
+ res=slocusEqi(l[1]);
397
+ for(j=2;j<=n;j++){res=intersect(res,slocusEqi(l[j]));}
398
+ for(j=1;j<n;j++)
399
+ {
400
+ for(k=j+1;k<=n;k++){res=intersect(res,l[j]+l[k]);}
401
+ }
402
+ return(res);
403
+ }
404
+ example
405
+ { "EXAMPLE:"; echo = 2;
406
+ ring r = 0,(u,v,w,x,y,z),dp;
407
+ ideal i = wx,wy,wz,vx,vy,vz,ux,uy,uz,y3-x2;;
408
+ slocus(i);
409
+ }
410
+ ///////////////////////////////////////////////////////////////////////////////
411
+
412
+ static proc slocusEqi (ideal i)
413
+ "USAGE: slocus(i); i ideal
414
+ RETURN: ideal of singular locus of i if i is pure dimensional
415
+ NOTE: this proc returns i and c-minors of jacobian ideal of i where c is the
416
+ codimension of i. Hence, if i is not pure dimensional, slocus may
417
+ return an ideal such that its 0-locus is strictly contained in the
418
+ singular locus of i
419
+ EXAMPLE: example slocus; shows an example
420
+ "
421
+ {
422
+ ideal ist=std(i);
423
+ if ( size(ist)==0 ) // we have a zero ideal
424
+ {
425
+ // the zero locus of the zero ideal is nonsingular
426
+ return( ideal(1) ) ;
427
+ }
428
+ if( deg( ist[1] ) == 0 ) // the ideal has a constant generator
429
+ {
430
+ return(ist);
431
+ }
432
+ int cod = nvars(basering) - dim(ist);
433
+ i = i + minor( jacob(i), cod );
434
+ return(i);
435
+ }
436
+ example
437
+ { "EXAMPLE:"; echo = 2;
438
+ ring r = 0,(x,y,z),ds;
439
+ ideal i = x5+y6+z6,x2+2y2+3z2;
440
+ slocus(i);
441
+ }
442
+ ///////////////////////////////////////////////////////////////////////////////
443
+
444
+ proc qhspectrum (poly f, intvec w)
445
+ "USAGE: qhspectrum(f,w); f=poly, w=intvec
446
+ ASSUME: f is a weighted homogeneous isolated singularity w.r.t. the weights
447
+ given by w; w must consist of as many positive integers as there
448
+ are variables of the basering
449
+ COMPUTE: the spectral numbers of the w-homogeneous polynomial f, computed in a
450
+ ring of characteristic 0
451
+ RETURN: intvec d,s1,...,su where:
452
+ d = w-degree(f) and si/d = i-th spectral-number(f)
453
+ No return value if basering has parameters or if f is no isolated
454
+ singularity, displays a warning in this case.
455
+ EXAMPLE: example qhspectrum; shows an example
456
+ "
457
+ {
458
+ int i,d,W;
459
+ intvec sp;
460
+ def r = basering;
461
+ if( find(charstr(r),",")!=0 )
462
+ {
463
+ "// coefficient field must not have parameters!";
464
+ return();
465
+ }
466
+ ring s = 0,x(1..nvars(r)),ws(w);
467
+ map phi = r,maxideal(1);
468
+ poly f = phi(f);
469
+ d = ord(f);
470
+ W = sum(w)-d;
471
+ ideal k = std(jacob(f));
472
+ if( vdim(k) == -1 )
473
+ {
474
+ "// f is no isolated singularity!";
475
+ return();
476
+ }
477
+ k = kbase(k);
478
+ for (i=1; i<=size(k); i++)
479
+ {
480
+ sp[i]=W+ord(k[i]);
481
+ }
482
+ list L = sort(sp);
483
+ sp = d,L[1];
484
+ return(sp);
485
+ }
486
+ example
487
+ { "EXAMPLE:"; echo = 2;
488
+ ring r;
489
+ poly f=x3+y5+z2;
490
+ intvec w=10,6,15;
491
+ qhspectrum(f,w);
492
+ // the spectrum numbers are:
493
+ // 1/30,7/30,11/30,13/30,17/30,19/30,23/30,29/30
494
+ }
495
+ ///////////////////////////////////////////////////////////////////////////////
496
+
497
+ proc Tjurina (def id, list #)
498
+ "USAGE: Tjurina(id[,<any>]); id=ideal or poly
499
+ ASSUME: id=ICIS (isolated complete intersection singularity)
500
+ RETURN: standard basis of Tjurina-module of id,
501
+ of type module if id=ideal, resp. of type ideal if id=poly.
502
+ If a second argument is present (of any type) return a list: @*
503
+ [1] = Tjurina number,
504
+ [2] = k-basis of miniversal deformation,
505
+ [3] = SB of Tjurina module,
506
+ [4] = Tjurina module
507
+ DISPLAY: Tjurina number if printlevel >= 0 (default)
508
+ NOTE: Tjurina number = -1 implies that id is not an ICIS
509
+ EXAMPLE: example Tjurina; shows examples
510
+ "
511
+ {
512
+ //---------------------------- initialisation ---------------------------------
513
+ def i = simplify(id,10);
514
+ int tau,n = 0,size(i);
515
+ if( size(ideal(i))==1 ) { def m=i; } // hypersurface case
516
+ else { def m=i*freemodule(n); } // complete intersection case
517
+ //--------------- compute Tjurina module, Tjurina number etc ------------------
518
+ def t1 = jacob(i)+m; // Tjurina module/ideal
519
+ def st1 = std(t1); // SB of Tjurina module/ideal
520
+ tau = vdim(st1); // Tjurina number
521
+ dbprint(printlevel-voice+3,"// Tjurina number = "+string(tau));
522
+ if( size(#)>0 )
523
+ {
524
+ def kB = kbase(st1); // basis of miniversal deformation
525
+ return(tau,kB,st1,t1);
526
+ }
527
+ return(st1);
528
+ }
529
+ example
530
+ { "EXAMPLE:"; echo = 2;
531
+ int p = printlevel;
532
+ printlevel = 1;
533
+ ring r = 0,(x,y,z),ds;
534
+ poly f = x5+y6+z7+xyz; // singularity T[5,6,7]
535
+ list T = Tjurina(f,"");
536
+ show(T[1]); // Tjurina number, should be 16
537
+ show(T[2]); // basis of miniversal deformation
538
+ show(T[3]); // SB of Tjurina ideal
539
+ show(T[4]); ""; // Tjurina ideal
540
+ ideal j = x2+y2+z2,x2+2y2+3z2;
541
+ show(kbase(Tjurina(j))); // basis of miniversal deformation
542
+ hilb(Tjurina(j)); // Hilbert series of Tjurina module
543
+ printlevel = p;
544
+ }
545
+ ///////////////////////////////////////////////////////////////////////////////
546
+
547
+ proc tjurina (ideal i)
548
+ "USAGE: tjurina(id); id=ideal or poly
549
+ ASSUME: id=ICIS (isolated complete intersection singularity)
550
+ RETURN: int = Tjurina number of id
551
+ NOTE: Tjurina number = -1 implies that id is not an ICIS
552
+ EXAMPLE: example tjurina; shows an example
553
+ "
554
+ {
555
+ return(vdim(Tjurina(i)));
556
+ }
557
+ example
558
+ { "EXAMPLE:"; echo = 2;
559
+ ring r=32003,(x,y,z),(c,ds);
560
+ ideal j=x2+y2+z2,x2+2y2+3z2;
561
+ tjurina(j);
562
+ }
563
+ ///////////////////////////////////////////////////////////////////////////////
564
+
565
+ proc T_1 (ideal id, list #)
566
+ "USAGE: T_1(id[,<any>]); id = ideal or poly
567
+ RETURN: T_1(id): of type module/ideal if id is of type ideal/poly.
568
+ We call T_1(id) the T_1-module of id. It is a std basis of the
569
+ presentation of 1st order deformations of P/id, if P is the basering.
570
+ If a second argument is present (of any type) return a list of
571
+ 3 modules:
572
+ [1]= T_1(id)
573
+ [2]= generators of normal bundle of id, lifted to P
574
+ [3]= module of relations of [2], lifted to P
575
+ (note: transpose[3]*[2]=0 mod id)
576
+ The list contains all non-easy objects which must be computed
577
+ to get T_1(id).
578
+ DISPLAY: k-dimension of T_1(id) if printlevel >= 0 (default)
579
+ NOTE: T_1(id) itself is usually of minor importance. Nevertheless, from it
580
+ all relevant information can be obtained. The most important are
581
+ probably vdim(T_1(id)); (which computes the Tjurina number),
582
+ hilb(T_1(id)); and kbase(T_1(id)).
583
+ If T_1 is called with two arguments, then matrix([2])*(kbase([1]))
584
+ represents a basis of 1st order semiuniversal deformation of id
585
+ (use proc 'deform', to get this in a direct way).
586
+ For a complete intersection the proc Tjurina is faster.
587
+ EXAMPLE: example T_1; shows an example
588
+ "
589
+ {
590
+ def RR=basering;
591
+ list RRL=ring_list(RR);
592
+ if(RRL[4]!=0)
593
+ {
594
+ int aa=size(#);
595
+ ideal QU=RRL[4];
596
+ RRL[4]=ideal(0);
597
+ def RS=ring(RRL);
598
+ setring RS;
599
+ ideal id=imap(RR,id);
600
+ ideal QU=imap(RR,QU);
601
+ if(aa)
602
+ {
603
+ list RES=T_1(id+QU,1);
604
+ }
605
+ else
606
+ {
607
+ module RES=T_1(id+QU);
608
+ }
609
+ setring RR;
610
+ def RES=imap(RS,RES);
611
+ return(RES);
612
+ }
613
+ ideal J=simplify(id,10);
614
+ //--------------------------- hypersurface case -------------------------------
615
+ if( size(J)<2 )
616
+ {
617
+ ideal t1 = std(J+jacob(J[1]));
618
+ module nb = [1]; module pnb;
619
+ dbprint(printlevel-voice+3,"// dim T_1 = "+string(vdim(t1)));
620
+ if( size(#)>0 )
621
+ {
622
+ module st1 = t1*gen(1);
623
+ attrib(st1,"isSB",1);
624
+ return(st1,nb,pnb);
625
+ }
626
+ return(t1);
627
+ }
628
+ //--------------------------- presentation of J -------------------------------
629
+ int rk;
630
+ def P = basering;
631
+ module jac, t1;
632
+ jac = jacob(J); // jacobian matrix of J converted to module
633
+ list A=nres(J,2); // compute presentation of J
634
+ def A(1..2)=A[1..2]; kill A; // A(2) = 1st syzygy module of J
635
+ //---------- go to quotient ring mod J and compute normal bundle --------------
636
+ qring R = std(J);
637
+ module jac = fetch(P,jac);
638
+ module t1 = transpose(fetch(P,A(2)));
639
+ list B=nres(t1,2); // resolve t1, B(2)=(J/J^2)*=normal_bdl
640
+ def B(1..2)=B[1..2]; kill B;
641
+ t1 = modulo(B(2),jac); // pres. of normal_bdl/trivial_deformations
642
+ rk=nrows(t1);
643
+ //-------------------------- pull back to basering ----------------------------
644
+ setring P;
645
+ t1 = fetch(R,t1)+J*freemodule(rk); // T_1-module, presentation of T_1
646
+ t1 = std(t1);
647
+ dbprint(printlevel-voice+3,"// dim T_1 = "+string(vdim(t1)));
648
+ if( size(#)>0 )
649
+ {
650
+ module B2 = fetch(R,B(2)); // presentation of normal bundle
651
+ list L = t1,B2,A(2);
652
+ attrib(L[1],"isSB",1);
653
+ return(L);
654
+ }
655
+ return(t1);
656
+ }
657
+ example
658
+ { "EXAMPLE:"; echo = 2;
659
+ int p = printlevel;
660
+ printlevel = 1;
661
+ ring r = 32003,(x,y,z),(c,ds);
662
+ ideal i = xy,xz,yz;
663
+ module T = T_1(i);
664
+ vdim(T); // Tjurina number = dim_K(T_1), should be 3
665
+ list L=T_1(i,"");
666
+ module kB = kbase(L[1]);
667
+ print(matrix(L[2])*matrix(kB)); // basis of 1st order miniversal deformation
668
+ show(L[2]); // presentation of normal bundle
669
+ print(L[3]); // relations of i
670
+ print(transpose(matrix(L[3]))*matrix(L[2])); // should be 0 (mod i)
671
+ printlevel = p;
672
+ }
673
+ ///////////////////////////////////////////////////////////////////////////////
674
+
675
+ proc T_2 (ideal id, list #)
676
+ "USAGE: T_2(id[,<any>]); id = ideal
677
+ RETURN: T_2(id): T_2-module of id . This is a std basis of a presentation of
678
+ the module of obstructions of R=P/id, if P is the basering.
679
+ If a second argument is present (of any type) return a list of
680
+ 4 modules and 1 ideal:
681
+ [1]= T_2(id)
682
+ [2]= standard basis of id (ideal)
683
+ [3]= module of relations of id (=1st syzygy module of id) @*
684
+ [4]= presentation of syz/kos
685
+ [5]= relations of Hom_P([3]/kos,R), lifted to P
686
+ The list contains all non-easy objects which must be computed
687
+ to get T_2(id).
688
+ DISPLAY: k-dimension of T_2(id) if printlevel >= 0 (default)
689
+ NOTE: The most important information is probably vdim(T_2(id)).
690
+ Use proc miniversal to get equations of the miniversal deformation.
691
+ EXAMPLE: example T_2; shows an example
692
+ "
693
+ {
694
+ def RR=basering;
695
+ list RRL=ring_list(RR);
696
+ if(RRL[4]!=0)
697
+ {
698
+ int aa=size(#);
699
+ ideal QU=RRL[4];
700
+ RRL[4]=ideal(0);
701
+ def RS=ring(RRL);
702
+ setring RS;
703
+ ideal id=imap(RR,id);
704
+ ideal QU=imap(RR,QU);
705
+ if(aa)
706
+ {
707
+ list RES=T_2(id+QU,1);
708
+ }
709
+ else
710
+ {
711
+ module RES=T_2(id+QU);
712
+ }
713
+ setring RR;
714
+ def RES=imap(RS,RES);
715
+ return(RES);
716
+ }
717
+
718
+ //--------------------------- initialisation ----------------------------------
719
+ def P = basering;
720
+ ideal J = id;
721
+ module kos,SK,B2,t2;
722
+ list L;
723
+ int n,rk;
724
+ //------------------- presentation of non-trivial syzygies --------------------
725
+ list A=nres(J,2); // resolve J, A(2)=syz
726
+ def A(1..2)=A[1..2]; kill A;
727
+ kos = koszul(2,J); // module of Koszul relations
728
+ SK = modulo(A(2),kos); // presentation of syz/kos
729
+ ideal J0 = std(J); // standard basis of J
730
+ //?*** sollte bei der Berechnung von res mit anfallen, zu aendern!!
731
+ //---------------------- fetch to quotient ring mod J -------------------------
732
+ qring R = J0; // make P/J the basering
733
+ module A2' = transpose(fetch(P,A(2))); // dual of syz
734
+ module t2 = transpose(fetch(P,SK)); // dual of syz/kos
735
+ list B=nres(t2,2); // resolve (syz/kos)*
736
+ def B(1..2)=B[1..2]; kill B;
737
+ t2 = modulo(B(2),A2'); // presentation of T_2
738
+ rk = nrows(t2);
739
+ //--------------------- fetch back to basering -------------------------------
740
+ setring P;
741
+ t2 = fetch(R,t2)+J*freemodule(rk);
742
+ t2 = std(t2);
743
+ dbprint(printlevel-voice+3,"// dim T_2 = "+string(vdim(t2)));
744
+ if( size(#)>0 )
745
+ {
746
+ B2 = fetch(R,B(2)); // generators of Hom_P(syz/kos,R)
747
+ L = t2,J0,A(2),SK,B2;
748
+ return(L);
749
+ }
750
+ return(t2);
751
+ }
752
+ example
753
+ { "EXAMPLE:"; echo = 2;
754
+ int p = printlevel;
755
+ printlevel = 1;
756
+ ring r = 32003,(x,y),(c,dp);
757
+ ideal j = x6-y4,x6y6,x2y4-x5y2;
758
+ module T = T_2(j);
759
+ vdim(T);
760
+ hilb(T);"";
761
+ ring r1 = 0,(x,y,z),dp;
762
+ ideal id = xy,xz,yz;
763
+ list L = T_2(id,"");
764
+ vdim(L[1]); // vdim of T_2
765
+ print(L[3]); // syzygy module of id
766
+ printlevel = p;
767
+ }
768
+ ///////////////////////////////////////////////////////////////////////////////
769
+
770
+ proc T_12 (ideal i, list #)
771
+ "USAGE: T_12(i[,any]); i = ideal
772
+ RETURN: T_12(i): list of 2 modules: @*
773
+ * standard basis of T_1-module =T_1(i), 1st order deformations @*
774
+ * standard basis of T_2-module =T_2(i), obstructions of R=P/i @*
775
+ If a second argument is present (of any type) return a list of
776
+ 9 modules, matrices, integers: @*
777
+ [1]= standard basis of T_1-module
778
+ [2]= standard basis of T_2-module
779
+ [3]= vdim of T_1
780
+ [4]= vdim of T_2
781
+ [5]= matrix, whose cols present infinitesimal deformations @*
782
+ [6]= matrix, whose cols are generators of relations of i(=syz(i)) @*
783
+ [7]= matrix, presenting Hom_P(syz/kos,R), lifted to P @*
784
+ [8]= presentation of T_1-module, no std basis
785
+ [9]= presentation of T_2-module, no std basis
786
+ DISPLAY: k-dimension of T_1 and T_2 if printlevel >= 0 (default)
787
+ NOTE: Use proc miniversal from deform.lib to get miniversal deformation of i,
788
+ the list contains all objects used by proc miniversal.
789
+ EXAMPLE: example T_12; shows an example
790
+ "
791
+ {
792
+ def RR=basering;
793
+ list RRL=ring_list(RR);
794
+ if(RRL[4]!=0)
795
+ {
796
+ int aa=size(#);
797
+ ideal QU=RRL[4];
798
+ RRL[4]=ideal(0);
799
+ def RS=ring(RRL);
800
+ setring RS;
801
+ ideal id=imap(RR,id);
802
+ ideal QU=imap(RR,QU);
803
+ if(aa)
804
+ {
805
+ list RES=T_12(id+QU,1);
806
+ }
807
+ else
808
+ {
809
+ list RES=T_12(id+QU);
810
+ }
811
+ setring RR;
812
+ list RES=imap(RS,RES);
813
+ return(RES);
814
+ }
815
+
816
+ //--------------------------- initialisation ----------------------------------
817
+ int n,r1,r2,d1,d2;
818
+ def P = basering;
819
+ i = simplify(i,10);
820
+ module jac,t1,t2,sbt1,sbt2;
821
+ matrix Kos,Syz,SK,kbT_1,Sx;
822
+ list L;
823
+ ideal i0 = std(i);
824
+ //-------------------- presentation of non-trivial syzygies -------------------
825
+ list I= nres(i,2); // resolve i
826
+ Syz = matrix(I[2]); // syz(i)
827
+ jac = jacob(i); // jacobi ideal
828
+ Kos = koszul(2,i); // koszul-relations
829
+ SK = modulo(Syz,Kos); // presentation of syz/kos
830
+ //--------------------- fetch to quotient ring mod i -------------------------
831
+ qring Ox = i0; // make P/i the basering
832
+ module Jac = fetch(P,jac);
833
+ matrix No = transpose(fetch(P,Syz)); // ker(No) = Hom(syz,Ox)
834
+ module So = transpose(fetch(P,SK)); // Hom(syz/kos,R)
835
+ list resS = nres(So,2);
836
+ matrix Sx = resS[2];
837
+ list resN = nres(No,2);
838
+ matrix Nx = resN[2];
839
+ module T_2 = modulo(Sx,No); // presentation of T_2
840
+ r2 = nrows(T_2);
841
+ module T_1 = modulo(Nx,Jac); // presentation of T_1
842
+ r1 = nrows(T_1);
843
+ //------------------------ pull back to basering ------------------------------
844
+ setring P;
845
+ t1 = fetch(Ox,T_1)+i*freemodule(r1);
846
+ t2 = fetch(Ox,T_2)+i*freemodule(r2);
847
+ sbt1 = std(t1);
848
+ d1 = vdim(sbt1);
849
+ sbt2 = std(t2);
850
+ d2 = vdim(sbt2);
851
+ dbprint(printlevel-voice+3,"// dim T_1 = "+string(d1),"// dim T_2 = "+string(d2));
852
+ if ( size(#)>0)
853
+ {
854
+ if (d1>0)
855
+ {
856
+ kbT_1 = fetch(Ox,Nx)*kbase(sbt1);
857
+ }
858
+ else
859
+ {
860
+ kbT_1 = 0;
861
+ }
862
+ Sx = fetch(Ox,Sx);
863
+ L = sbt1,sbt2,d1,d2,kbT_1,Syz,Sx,t1,t2;
864
+ return(L);
865
+ }
866
+ L = sbt1,sbt2;
867
+ return(L);
868
+ }
869
+ example
870
+ { "EXAMPLE:"; echo = 2;
871
+ int p = printlevel;
872
+ printlevel = 1;
873
+ ring r = 199,(x,y,z,u,v),(c,ws(4,3,2,3,4));
874
+ ideal i = xz-y2,yz2-xu,xv-yzu,yu-z3,z2u-yv,zv-u2;
875
+ //a cyclic quotient singularity
876
+ list L = T_12(i,1);
877
+ print(L[5]); //matrix of infin. deformations
878
+ printlevel = p;
879
+ }
880
+ ///////////////////////////////////////////////////////////////////////////////
881
+ proc codim (def id1,def id2)
882
+ "USAGE: codim(id1,id2); id1,id2 ideal or module, both must be standard bases
883
+ RETURN: int, which is:
884
+ 1. the vectorspace dimension of id1/id2 if id2 is contained in id1
885
+ and if this number is finite@*
886
+ 2. -1 if the dimension of id1/id2 is infinite@*
887
+ 3. -2 if id2 is not contained in id1
888
+ COMPUTE: consider the Hilbert series iv1(t) of id1 and iv2(t) of id2.
889
+ If codim(id1,id2) is finite, q(t)=(iv2(t)-iv1(t))/(1-t)^n is
890
+ rational, and the codimension is the sum of the coefficients of q(t)
891
+ (n = dimension of basering).
892
+ EXAMPLE: example codim; shows an example
893
+ "
894
+ {
895
+ if (attrib(id1,"isSB")!=1) { "first argument of codim is not a SB";}
896
+ if (attrib(id2,"isSB")!=1) { "second argument of codim is not a SB";}
897
+ intvec iv1, iv2, iv;
898
+ int i, d1, d2, dd, i1, i2, ia, ie;
899
+ //--------------------------- check id2 < id1 -------------------------------
900
+ ideal led = lead(id1);
901
+ attrib(led, "isSB",1);
902
+ i = size(NF(lead(id2),led));
903
+ if ( i > 0 )
904
+ {
905
+ return(-2);
906
+ }
907
+ //--------------------------- 1. check finiteness ---------------------------
908
+ i1 = dim(id1);
909
+ i2 = dim(id2);
910
+ if (i1 < 0)
911
+ {
912
+ if ( i2 < 0 )
913
+ {
914
+ return(0);
915
+ }
916
+ if (i2 == 0)
917
+ {
918
+ return (vdim(id2));
919
+ }
920
+ else
921
+ {
922
+ return(-1);
923
+ }
924
+ }
925
+ if (i2 != i1)
926
+ {
927
+ return(-1);
928
+ }
929
+ if (i2 <= 0)
930
+ {
931
+ return(vdim(id2)-vdim(id1));
932
+ }
933
+ // if (mult(id2) != mult(id1))
934
+ //{
935
+ // return(-1);
936
+ // }
937
+ //--------------------------- module ---------------------------------------
938
+ d1 = nrows(module(id1));
939
+ d2 = nrows(module(id2));
940
+ dd = 0;
941
+ if (d1 > d2)
942
+ {
943
+ id2=id2,maxideal(1)*gen(d1);
944
+ dd = -1;
945
+ }
946
+ if (d2 > d1)
947
+ {
948
+ id1=id1,maxideal(1)*gen(d2);
949
+ dd = 1;
950
+ }
951
+ //--------------------------- compute first hilbertseries ------------------
952
+ iv1 = intvec(hilb(id1,1));
953
+ i1 = size(iv1);
954
+ iv2 = intvec(hilb(id2,1));
955
+ i2 = size(iv2);
956
+ //--------------------------- difference of hilbertseries ------------------
957
+ if (i2 > i1)
958
+ {
959
+ for ( i=1; i<=i1; i=i+1)
960
+ {
961
+ iv2[i] = iv2[i]-iv1[i];
962
+ }
963
+ ie = i2;
964
+ iv = iv2;
965
+ }
966
+ else
967
+ {
968
+ for ( i=1; i<=i2; i=i+1)
969
+ {
970
+ iv1[i] = iv2[i]-iv1[i];
971
+ }
972
+ iv = iv1;
973
+ for (ie=i1;ie>=0;ie=ie-1)
974
+ {
975
+ if (ie == 0)
976
+ {
977
+ return(0);
978
+ }
979
+ if (iv[ie] != 0)
980
+ {
981
+ break;
982
+ }
983
+ }
984
+ }
985
+ ia = 1;
986
+ while (iv[ia] == 0) { ia=ia+1; }
987
+ //--------------------------- ia <= nonzeros <= ie -------------------------
988
+ iv1 = iv[ia];
989
+ for(i=ia+1;i<=ie;i=i+1)
990
+ {
991
+ iv1=iv1,iv[i];
992
+ }
993
+ //--------------------------- compute second hilbertseries -----------------
994
+ iv2 = hilb(iv1);
995
+ //--------------------------- check finitenes ------------------------------
996
+ i2 = size(iv2);
997
+ i1 = ie - ia + 1 - i2;
998
+ if (i1 != nvars(basering))
999
+ {
1000
+ return(-1);
1001
+ }
1002
+ //--------------------------- compute result -------------------------------
1003
+ i1 = 0;
1004
+ for ( i=1; i<=i2; i=i+1)
1005
+ {
1006
+ i1 = i1 + iv2[i];
1007
+ }
1008
+ return(i1+dd);
1009
+ }
1010
+ example
1011
+ { "EXAMPLE:"; echo = 2;
1012
+ ring r = 0,(x,y),dp;
1013
+ ideal j = y6,x4;
1014
+ ideal m = x,y;
1015
+ attrib(m,"isSB",1); //let Singular know that ideals are a standard basis
1016
+ attrib(j,"isSB",1);
1017
+ codim(m,j); // should be 23 (Milnor number -1 of y7-x5)
1018
+ }
1019
+
1020
+ ///////////////////////////////////////////////////////////////////////////////
1021
+
1022
+ proc tangentcone (def id,list #)
1023
+ "USAGE: tangentcone(id [,n]); id = ideal, n = int
1024
+ RETURN: the tangent cone of id
1025
+ NOTE: The procedure works for any monomial ordering.
1026
+ If n=0 use std w.r.t. local ordering ds, if n=1 use locstd.
1027
+ EXAMPLE: example tangentcone; shows an example
1028
+ "
1029
+ {
1030
+ int ii,n;
1031
+ def bas = basering;
1032
+ ideal tang;
1033
+ if (size(#) !=0) { n= #[1]; }
1034
+ if( n==0 )
1035
+ {
1036
+ def @newr@=changeord(list(list("ds",1:nvars(basering))));
1037
+ setring @newr@;
1038
+ ideal @id = imap(bas,id);
1039
+ @id = std(@id);
1040
+ setring bas;
1041
+ id = imap(@newr@,@id);
1042
+ kill @newr@;
1043
+ }
1044
+ else
1045
+ {
1046
+ id = locstd(id);
1047
+ }
1048
+
1049
+ for(ii=1; ii<=size(id); ii++)
1050
+ {
1051
+ tang[ii]=jet(id[ii],mindeg(id[ii]));
1052
+ }
1053
+ return(tang);
1054
+ }
1055
+ example
1056
+ { "EXAMPLE:"; echo = 2;
1057
+ ring R = 0,(x,y,z),ds;
1058
+ ideal i = 7xyz+z5,x2+y3+z7,5z5+y5;
1059
+ tangentcone(i);
1060
+ }
1061
+ ///////////////////////////////////////////////////////////////////////////////
1062
+
1063
+ proc locstd (def id)
1064
+ "USAGE: locstd (id); id = ideal
1065
+ RETURN: a standard basis for a local degree ordering
1066
+ NOTE: the procedure homogenizes id w.r.t. a new 1st variable @t@, computes
1067
+ a SB w.r.t. (dp(1),dp) and substitutes @t@ by 1.
1068
+ Hence the result is a SB with respect to an ordering which sorts
1069
+ first w.r.t. the order and then refines it with dp. This is a
1070
+ local degree ordering.
1071
+ This is done in order to avoid cancellation of units and thus
1072
+ be able to use option(contentSB);
1073
+ EXAMPLE: example locstd; shows an example
1074
+ "
1075
+ {
1076
+ int ii;
1077
+ def bas = basering;
1078
+ ring @r_locstd = create_ring(ring_list(bas)[1], "(@t@,"+varstr(bas)+")", "(dp(1),dp)", "no_minpoly");
1079
+ ideal @id = imap(bas,id);
1080
+ ideal @hid = homog(@id,@t@);
1081
+ @hid = std(@hid);
1082
+ @hid = subst(@hid,@t@,1);
1083
+ setring bas;
1084
+ def @hid = imap(@r_locstd,@hid);
1085
+ attrib(@hid,"isSB",1);
1086
+ kill @r_locstd;
1087
+ return(@hid);
1088
+ }
1089
+ example
1090
+ { "EXAMPLE:"; echo = 2;
1091
+ ring R = 0,(x,y,z),ds;
1092
+ ideal i = xyz+z5,2x2+y3+z7,3z5+y5;
1093
+ locstd(i);
1094
+ }