passagemath-singular 10.6.31rc3__cp314-cp314-musllinux_1_2_x86_64.whl

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

Potentially problematic release.


This version of passagemath-singular might be problematic. Click here for more details.

Files changed (493) hide show
  1. PySingular.cpython-314-x86_64-linux-musl.so +0 -0
  2. passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
  3. passagemath_singular-10.6.31rc3.dist-info/RECORD +493 -0
  4. passagemath_singular-10.6.31rc3.dist-info/WHEEL +5 -0
  5. passagemath_singular-10.6.31rc3.dist-info/top_level.txt +3 -0
  6. passagemath_singular.libs/libSingular-4-67059f19.4.1.so +0 -0
  7. passagemath_singular.libs/libcddgmp-30166d29.so.0.1.3 +0 -0
  8. passagemath_singular.libs/libfactory-4-9d37bcf4.4.1.so +0 -0
  9. passagemath_singular.libs/libflint-fd6f12fc.so.21.0.0 +0 -0
  10. passagemath_singular.libs/libgcc_s-0cd532bd.so.1 +0 -0
  11. passagemath_singular.libs/libgf2x-9e30c3e3.so.3.0.0 +0 -0
  12. passagemath_singular.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
  13. passagemath_singular.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  14. passagemath_singular.libs/libgsl-42cda06f.so.28.0.0 +0 -0
  15. passagemath_singular.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
  16. passagemath_singular.libs/libncursesw-9c9e32c3.so.6.5 +0 -0
  17. passagemath_singular.libs/libntl-26885ca2.so.44.0.1 +0 -0
  18. passagemath_singular.libs/libomalloc-0-e9ff96db.9.6.so +0 -0
  19. passagemath_singular.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
  20. passagemath_singular.libs/libpolys-4-8bcf8e7d.4.1.so +0 -0
  21. passagemath_singular.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
  22. passagemath_singular.libs/libreadline-06542304.so.8.2 +0 -0
  23. passagemath_singular.libs/libsingular_resources-4-73bf7623.4.1.so +0 -0
  24. passagemath_singular.libs/libstdc++-5d72f927.so.6.0.33 +0 -0
  25. sage/algebras/all__sagemath_singular.py +3 -0
  26. sage/algebras/fusion_rings/all.py +19 -0
  27. sage/algebras/fusion_rings/f_matrix.py +2448 -0
  28. sage/algebras/fusion_rings/fast_parallel_fmats_methods.cpython-314-x86_64-linux-musl.so +0 -0
  29. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd +5 -0
  30. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx +538 -0
  31. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.cpython-314-x86_64-linux-musl.so +0 -0
  32. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd +3 -0
  33. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx +331 -0
  34. sage/algebras/fusion_rings/fusion_double.py +899 -0
  35. sage/algebras/fusion_rings/fusion_ring.py +1580 -0
  36. sage/algebras/fusion_rings/poly_tup_engine.cpython-314-x86_64-linux-musl.so +0 -0
  37. sage/algebras/fusion_rings/poly_tup_engine.pxd +24 -0
  38. sage/algebras/fusion_rings/poly_tup_engine.pyx +579 -0
  39. sage/algebras/fusion_rings/shm_managers.cpython-314-x86_64-linux-musl.so +0 -0
  40. sage/algebras/fusion_rings/shm_managers.pxd +24 -0
  41. sage/algebras/fusion_rings/shm_managers.pyx +780 -0
  42. sage/algebras/letterplace/all.py +1 -0
  43. sage/algebras/letterplace/free_algebra_element_letterplace.cpython-314-x86_64-linux-musl.so +0 -0
  44. sage/algebras/letterplace/free_algebra_element_letterplace.pxd +18 -0
  45. sage/algebras/letterplace/free_algebra_element_letterplace.pyx +755 -0
  46. sage/algebras/letterplace/free_algebra_letterplace.cpython-314-x86_64-linux-musl.so +0 -0
  47. sage/algebras/letterplace/free_algebra_letterplace.pxd +35 -0
  48. sage/algebras/letterplace/free_algebra_letterplace.pyx +914 -0
  49. sage/algebras/letterplace/letterplace_ideal.cpython-314-x86_64-linux-musl.so +0 -0
  50. sage/algebras/letterplace/letterplace_ideal.pyx +408 -0
  51. sage/algebras/quatalg/all.py +2 -0
  52. sage/algebras/quatalg/quaternion_algebra.py +4778 -0
  53. sage/algebras/quatalg/quaternion_algebra_cython.cpython-314-x86_64-linux-musl.so +0 -0
  54. sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
  55. sage/algebras/quatalg/quaternion_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  56. sage/algebras/quatalg/quaternion_algebra_element.pxd +29 -0
  57. sage/algebras/quatalg/quaternion_algebra_element.pyx +2176 -0
  58. sage/all__sagemath_singular.py +11 -0
  59. sage/ext_data/all__sagemath_singular.py +1 -0
  60. sage/ext_data/singular/function_field/core.lib +98 -0
  61. sage/interfaces/all__sagemath_singular.py +1 -0
  62. sage/interfaces/singular.py +2835 -0
  63. sage/libs/all__sagemath_singular.py +1 -0
  64. sage/libs/singular/__init__.py +1 -0
  65. sage/libs/singular/decl.pxd +1168 -0
  66. sage/libs/singular/function.cpython-314-x86_64-linux-musl.so +0 -0
  67. sage/libs/singular/function.pxd +87 -0
  68. sage/libs/singular/function.pyx +1901 -0
  69. sage/libs/singular/function_factory.py +61 -0
  70. sage/libs/singular/groebner_strategy.cpython-314-x86_64-linux-musl.so +0 -0
  71. sage/libs/singular/groebner_strategy.pxd +22 -0
  72. sage/libs/singular/groebner_strategy.pyx +582 -0
  73. sage/libs/singular/option.cpython-314-x86_64-linux-musl.so +0 -0
  74. sage/libs/singular/option.pyx +671 -0
  75. sage/libs/singular/polynomial.cpython-314-x86_64-linux-musl.so +0 -0
  76. sage/libs/singular/polynomial.pxd +39 -0
  77. sage/libs/singular/polynomial.pyx +661 -0
  78. sage/libs/singular/ring.cpython-314-x86_64-linux-musl.so +0 -0
  79. sage/libs/singular/ring.pxd +58 -0
  80. sage/libs/singular/ring.pyx +893 -0
  81. sage/libs/singular/singular.cpython-314-x86_64-linux-musl.so +0 -0
  82. sage/libs/singular/singular.pxd +72 -0
  83. sage/libs/singular/singular.pyx +1944 -0
  84. sage/libs/singular/standard_options.py +145 -0
  85. sage/matrix/all__sagemath_singular.py +1 -0
  86. sage/matrix/matrix_mpolynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  87. sage/matrix/matrix_mpolynomial_dense.pxd +7 -0
  88. sage/matrix/matrix_mpolynomial_dense.pyx +615 -0
  89. sage/rings/all__sagemath_singular.py +1 -0
  90. sage/rings/function_field/all__sagemath_singular.py +1 -0
  91. sage/rings/function_field/derivations_polymod.py +911 -0
  92. sage/rings/function_field/element_polymod.cpython-314-x86_64-linux-musl.so +0 -0
  93. sage/rings/function_field/element_polymod.pyx +406 -0
  94. sage/rings/function_field/function_field_polymod.py +2611 -0
  95. sage/rings/function_field/ideal_polymod.py +1775 -0
  96. sage/rings/function_field/order_polymod.py +1475 -0
  97. sage/rings/function_field/place_polymod.py +681 -0
  98. sage/rings/polynomial/all__sagemath_singular.py +1 -0
  99. sage/rings/polynomial/multi_polynomial_ideal_libsingular.cpython-314-x86_64-linux-musl.so +0 -0
  100. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd +5 -0
  101. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx +339 -0
  102. sage/rings/polynomial/multi_polynomial_libsingular.cpython-314-x86_64-linux-musl.so +0 -0
  103. sage/rings/polynomial/multi_polynomial_libsingular.pxd +30 -0
  104. sage/rings/polynomial/multi_polynomial_libsingular.pyx +6277 -0
  105. sage/rings/polynomial/plural.cpython-314-x86_64-linux-musl.so +0 -0
  106. sage/rings/polynomial/plural.pxd +48 -0
  107. sage/rings/polynomial/plural.pyx +3171 -0
  108. sage/symbolic/all__sagemath_singular.py +1 -0
  109. sage/symbolic/comparison_impl.pxi +428 -0
  110. sage/symbolic/constants_c_impl.pxi +178 -0
  111. sage/symbolic/expression.cpython-314-x86_64-linux-musl.so +0 -0
  112. sage/symbolic/expression.pxd +7 -0
  113. sage/symbolic/expression.pyx +14200 -0
  114. sage/symbolic/getitem_impl.pxi +202 -0
  115. sage/symbolic/pynac.pxi +572 -0
  116. sage/symbolic/pynac_constant_impl.pxi +133 -0
  117. sage/symbolic/pynac_function_impl.pxi +206 -0
  118. sage/symbolic/pynac_impl.pxi +2576 -0
  119. sage/symbolic/pynac_wrap.h +124 -0
  120. sage/symbolic/series_impl.pxi +272 -0
  121. sage/symbolic/substitution_map_impl.pxi +94 -0
  122. sage_wheels/bin/ESingular +0 -0
  123. sage_wheels/bin/Singular +0 -0
  124. sage_wheels/bin/TSingular +0 -0
  125. sage_wheels/lib/singular/MOD/cohomo.la +41 -0
  126. sage_wheels/lib/singular/MOD/cohomo.so +0 -0
  127. sage_wheels/lib/singular/MOD/customstd.la +41 -0
  128. sage_wheels/lib/singular/MOD/customstd.so +0 -0
  129. sage_wheels/lib/singular/MOD/freealgebra.la +41 -0
  130. sage_wheels/lib/singular/MOD/freealgebra.so +0 -0
  131. sage_wheels/lib/singular/MOD/gfanlib.la +41 -0
  132. sage_wheels/lib/singular/MOD/gfanlib.so +0 -0
  133. sage_wheels/lib/singular/MOD/gitfan.la +41 -0
  134. sage_wheels/lib/singular/MOD/gitfan.so +0 -0
  135. sage_wheels/lib/singular/MOD/interval.la +41 -0
  136. sage_wheels/lib/singular/MOD/interval.so +0 -0
  137. sage_wheels/lib/singular/MOD/loctriv.la +41 -0
  138. sage_wheels/lib/singular/MOD/loctriv.so +0 -0
  139. sage_wheels/lib/singular/MOD/machinelearning.la +41 -0
  140. sage_wheels/lib/singular/MOD/machinelearning.so +0 -0
  141. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.la +41 -0
  142. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.so +0 -0
  143. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.la +41 -0
  144. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.so +0 -0
  145. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.la +41 -0
  146. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.so +0 -0
  147. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.la +41 -0
  148. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.so +0 -0
  149. sage_wheels/lib/singular/MOD/partialgb.la +41 -0
  150. sage_wheels/lib/singular/MOD/partialgb.so +0 -0
  151. sage_wheels/lib/singular/MOD/pyobject.la +41 -0
  152. sage_wheels/lib/singular/MOD/pyobject.so +0 -0
  153. sage_wheels/lib/singular/MOD/singmathic.la +41 -0
  154. sage_wheels/lib/singular/MOD/singmathic.so +0 -0
  155. sage_wheels/lib/singular/MOD/sispasm.la +41 -0
  156. sage_wheels/lib/singular/MOD/sispasm.so +0 -0
  157. sage_wheels/lib/singular/MOD/subsets.la +41 -0
  158. sage_wheels/lib/singular/MOD/subsets.so +0 -0
  159. sage_wheels/lib/singular/MOD/systhreads.la +41 -0
  160. sage_wheels/lib/singular/MOD/systhreads.so +0 -0
  161. sage_wheels/lib/singular/MOD/syzextra.la +41 -0
  162. sage_wheels/lib/singular/MOD/syzextra.so +0 -0
  163. sage_wheels/libexec/singular/MOD/change_cost +0 -0
  164. sage_wheels/libexec/singular/MOD/singularsurf +11 -0
  165. sage_wheels/libexec/singular/MOD/singularsurf_jupyter +9 -0
  166. sage_wheels/libexec/singular/MOD/singularsurf_win +10 -0
  167. sage_wheels/libexec/singular/MOD/solve_IP +0 -0
  168. sage_wheels/libexec/singular/MOD/surfex +16 -0
  169. sage_wheels/libexec/singular/MOD/toric_ideal +0 -0
  170. sage_wheels/share/factory/gftables/10201 +342 -0
  171. sage_wheels/share/factory/gftables/1024 +37 -0
  172. sage_wheels/share/factory/gftables/10609 +356 -0
  173. sage_wheels/share/factory/gftables/11449 +384 -0
  174. sage_wheels/share/factory/gftables/11881 +398 -0
  175. sage_wheels/share/factory/gftables/121 +6 -0
  176. sage_wheels/share/factory/gftables/12167 +408 -0
  177. sage_wheels/share/factory/gftables/125 +7 -0
  178. sage_wheels/share/factory/gftables/12769 +428 -0
  179. sage_wheels/share/factory/gftables/128 +7 -0
  180. sage_wheels/share/factory/gftables/1331 +47 -0
  181. sage_wheels/share/factory/gftables/1369 +48 -0
  182. sage_wheels/share/factory/gftables/14641 +490 -0
  183. sage_wheels/share/factory/gftables/15625 +523 -0
  184. sage_wheels/share/factory/gftables/16 +3 -0
  185. sage_wheels/share/factory/gftables/16129 +540 -0
  186. sage_wheels/share/factory/gftables/16384 +549 -0
  187. sage_wheels/share/factory/gftables/16807 +563 -0
  188. sage_wheels/share/factory/gftables/1681 +58 -0
  189. sage_wheels/share/factory/gftables/169 +8 -0
  190. sage_wheels/share/factory/gftables/17161 +574 -0
  191. sage_wheels/share/factory/gftables/1849 +64 -0
  192. sage_wheels/share/factory/gftables/18769 +628 -0
  193. sage_wheels/share/factory/gftables/19321 +646 -0
  194. sage_wheels/share/factory/gftables/19683 +659 -0
  195. sage_wheels/share/factory/gftables/2048 +71 -0
  196. sage_wheels/share/factory/gftables/2187 +75 -0
  197. sage_wheels/share/factory/gftables/2197 +76 -0
  198. sage_wheels/share/factory/gftables/2209 +76 -0
  199. sage_wheels/share/factory/gftables/22201 +742 -0
  200. sage_wheels/share/factory/gftables/22801 +762 -0
  201. sage_wheels/share/factory/gftables/2401 +82 -0
  202. sage_wheels/share/factory/gftables/243 +11 -0
  203. sage_wheels/share/factory/gftables/24389 +815 -0
  204. sage_wheels/share/factory/gftables/24649 +824 -0
  205. sage_wheels/share/factory/gftables/25 +3 -0
  206. sage_wheels/share/factory/gftables/256 +11 -0
  207. sage_wheels/share/factory/gftables/26569 +888 -0
  208. sage_wheels/share/factory/gftables/27 +3 -0
  209. sage_wheels/share/factory/gftables/27889 +932 -0
  210. sage_wheels/share/factory/gftables/2809 +96 -0
  211. sage_wheels/share/factory/gftables/28561 +954 -0
  212. sage_wheels/share/factory/gftables/289 +12 -0
  213. sage_wheels/share/factory/gftables/29791 +995 -0
  214. sage_wheels/share/factory/gftables/29929 +1000 -0
  215. sage_wheels/share/factory/gftables/3125 +107 -0
  216. sage_wheels/share/factory/gftables/32 +4 -0
  217. sage_wheels/share/factory/gftables/32041 +1070 -0
  218. sage_wheels/share/factory/gftables/32761 +1094 -0
  219. sage_wheels/share/factory/gftables/32768 +1095 -0
  220. sage_wheels/share/factory/gftables/343 +14 -0
  221. sage_wheels/share/factory/gftables/3481 +118 -0
  222. sage_wheels/share/factory/gftables/361 +14 -0
  223. sage_wheels/share/factory/gftables/36481 +1218 -0
  224. sage_wheels/share/factory/gftables/3721 +126 -0
  225. sage_wheels/share/factory/gftables/37249 +1244 -0
  226. sage_wheels/share/factory/gftables/38809 +1296 -0
  227. sage_wheels/share/factory/gftables/39601 +1322 -0
  228. sage_wheels/share/factory/gftables/4 +3 -0
  229. sage_wheels/share/factory/gftables/4096 +139 -0
  230. sage_wheels/share/factory/gftables/44521 +1486 -0
  231. sage_wheels/share/factory/gftables/4489 +152 -0
  232. sage_wheels/share/factory/gftables/49 +4 -0
  233. sage_wheels/share/factory/gftables/4913 +166 -0
  234. sage_wheels/share/factory/gftables/49729 +1660 -0
  235. sage_wheels/share/factory/gftables/5041 +170 -0
  236. sage_wheels/share/factory/gftables/50653 +1691 -0
  237. sage_wheels/share/factory/gftables/512 +20 -0
  238. sage_wheels/share/factory/gftables/51529 +1720 -0
  239. sage_wheels/share/factory/gftables/52441 +1750 -0
  240. sage_wheels/share/factory/gftables/529 +20 -0
  241. sage_wheels/share/factory/gftables/5329 +180 -0
  242. sage_wheels/share/factory/gftables/54289 +1812 -0
  243. sage_wheels/share/factory/gftables/57121 +1906 -0
  244. sage_wheels/share/factory/gftables/58081 +1938 -0
  245. sage_wheels/share/factory/gftables/59049 +1971 -0
  246. sage_wheels/share/factory/gftables/6241 +210 -0
  247. sage_wheels/share/factory/gftables/625 +23 -0
  248. sage_wheels/share/factory/gftables/63001 +2102 -0
  249. sage_wheels/share/factory/gftables/64 +5 -0
  250. sage_wheels/share/factory/gftables/6561 +221 -0
  251. sage_wheels/share/factory/gftables/6859 +231 -0
  252. sage_wheels/share/factory/gftables/6889 +232 -0
  253. sage_wheels/share/factory/gftables/729 +27 -0
  254. sage_wheels/share/factory/gftables/7921 +266 -0
  255. sage_wheels/share/factory/gftables/8 +3 -0
  256. sage_wheels/share/factory/gftables/81 +5 -0
  257. sage_wheels/share/factory/gftables/8192 +276 -0
  258. sage_wheels/share/factory/gftables/841 +30 -0
  259. sage_wheels/share/factory/gftables/9 +3 -0
  260. sage_wheels/share/factory/gftables/9409 +316 -0
  261. sage_wheels/share/factory/gftables/961 +34 -0
  262. sage_wheels/share/info/singular.info +191898 -0
  263. sage_wheels/share/singular/LIB/GND.lib +1359 -0
  264. sage_wheels/share/singular/LIB/JMBTest.lib +976 -0
  265. sage_wheels/share/singular/LIB/JMSConst.lib +1363 -0
  266. sage_wheels/share/singular/LIB/KVequiv.lib +699 -0
  267. sage_wheels/share/singular/LIB/SingularityDBM.lib +491 -0
  268. sage_wheels/share/singular/LIB/VecField.lib +1542 -0
  269. sage_wheels/share/singular/LIB/absfact.lib +959 -0
  270. sage_wheels/share/singular/LIB/ainvar.lib +730 -0
  271. sage_wheels/share/singular/LIB/aksaka.lib +419 -0
  272. sage_wheels/share/singular/LIB/alexpoly.lib +2542 -0
  273. sage_wheels/share/singular/LIB/algebra.lib +1193 -0
  274. sage_wheels/share/singular/LIB/all.lib +136 -0
  275. sage_wheels/share/singular/LIB/arcpoint.lib +514 -0
  276. sage_wheels/share/singular/LIB/arnold.lib +4553 -0
  277. sage_wheels/share/singular/LIB/arnoldclassify.lib +2058 -0
  278. sage_wheels/share/singular/LIB/arr.lib +3486 -0
  279. sage_wheels/share/singular/LIB/assprimeszerodim.lib +755 -0
  280. sage_wheels/share/singular/LIB/autgradalg.lib +3361 -0
  281. sage_wheels/share/singular/LIB/bfun.lib +1964 -0
  282. sage_wheels/share/singular/LIB/bimodules.lib +774 -0
  283. sage_wheels/share/singular/LIB/brillnoether.lib +226 -0
  284. sage_wheels/share/singular/LIB/brnoeth.lib +5017 -0
  285. sage_wheels/share/singular/LIB/central.lib +2169 -0
  286. sage_wheels/share/singular/LIB/chern.lib +4162 -0
  287. sage_wheels/share/singular/LIB/cimonom.lib +571 -0
  288. sage_wheels/share/singular/LIB/cisimplicial.lib +1835 -0
  289. sage_wheels/share/singular/LIB/classify.lib +3239 -0
  290. sage_wheels/share/singular/LIB/classify2.lib +1462 -0
  291. sage_wheels/share/singular/LIB/classifyMapGerms.lib +1515 -0
  292. sage_wheels/share/singular/LIB/classify_aeq.lib +3253 -0
  293. sage_wheels/share/singular/LIB/classifyceq.lib +2092 -0
  294. sage_wheels/share/singular/LIB/classifyci.lib +1133 -0
  295. sage_wheels/share/singular/LIB/combinat.lib +91 -0
  296. sage_wheels/share/singular/LIB/compregb.lib +276 -0
  297. sage_wheels/share/singular/LIB/control.lib +1636 -0
  298. sage_wheels/share/singular/LIB/crypto.lib +3795 -0
  299. sage_wheels/share/singular/LIB/curveInv.lib +667 -0
  300. sage_wheels/share/singular/LIB/curvepar.lib +1817 -0
  301. sage_wheels/share/singular/LIB/customstd.lib +100 -0
  302. sage_wheels/share/singular/LIB/deRham.lib +5979 -0
  303. sage_wheels/share/singular/LIB/decodegb.lib +2134 -0
  304. sage_wheels/share/singular/LIB/decomp.lib +1655 -0
  305. sage_wheels/share/singular/LIB/deflation.lib +872 -0
  306. sage_wheels/share/singular/LIB/deform.lib +925 -0
  307. sage_wheels/share/singular/LIB/difform.lib +3055 -0
  308. sage_wheels/share/singular/LIB/divisors.lib +750 -0
  309. sage_wheels/share/singular/LIB/dmod.lib +5817 -0
  310. sage_wheels/share/singular/LIB/dmodapp.lib +3269 -0
  311. sage_wheels/share/singular/LIB/dmodideal.lib +1211 -0
  312. sage_wheels/share/singular/LIB/dmodloc.lib +2645 -0
  313. sage_wheels/share/singular/LIB/dmodvar.lib +818 -0
  314. sage_wheels/share/singular/LIB/dummy.lib +17 -0
  315. sage_wheels/share/singular/LIB/elim.lib +1009 -0
  316. sage_wheels/share/singular/LIB/ellipticcovers.lib +548 -0
  317. sage_wheels/share/singular/LIB/enumpoints.lib +146 -0
  318. sage_wheels/share/singular/LIB/equising.lib +2127 -0
  319. sage_wheels/share/singular/LIB/ffmodstd.lib +2384 -0
  320. sage_wheels/share/singular/LIB/ffsolve.lib +1289 -0
  321. sage_wheels/share/singular/LIB/findifs.lib +778 -0
  322. sage_wheels/share/singular/LIB/finitediff.lib +1768 -0
  323. sage_wheels/share/singular/LIB/finvar.lib +7989 -0
  324. sage_wheels/share/singular/LIB/fpadim.lib +2429 -0
  325. sage_wheels/share/singular/LIB/fpalgebras.lib +1666 -0
  326. sage_wheels/share/singular/LIB/fpaprops.lib +1462 -0
  327. sage_wheels/share/singular/LIB/freegb.lib +3853 -0
  328. sage_wheels/share/singular/LIB/general.lib +1350 -0
  329. sage_wheels/share/singular/LIB/gfan.lib +1768 -0
  330. sage_wheels/share/singular/LIB/gitfan.lib +3130 -0
  331. sage_wheels/share/singular/LIB/gkdim.lib +99 -0
  332. sage_wheels/share/singular/LIB/gmspoly.lib +589 -0
  333. sage_wheels/share/singular/LIB/gmssing.lib +1739 -0
  334. sage_wheels/share/singular/LIB/goettsche.lib +909 -0
  335. sage_wheels/share/singular/LIB/graal.lib +1366 -0
  336. sage_wheels/share/singular/LIB/gradedModules.lib +2541 -0
  337. sage_wheels/share/singular/LIB/graphics.lib +360 -0
  338. sage_wheels/share/singular/LIB/grobcov.lib +7706 -0
  339. sage_wheels/share/singular/LIB/groups.lib +1123 -0
  340. sage_wheels/share/singular/LIB/grwalk.lib +507 -0
  341. sage_wheels/share/singular/LIB/hdepth.lib +194 -0
  342. sage_wheels/share/singular/LIB/help.cnf +57 -0
  343. sage_wheels/share/singular/LIB/hess.lib +1946 -0
  344. sage_wheels/share/singular/LIB/hnoether.lib +4292 -0
  345. sage_wheels/share/singular/LIB/hodge.lib +400 -0
  346. sage_wheels/share/singular/LIB/homolog.lib +1965 -0
  347. sage_wheels/share/singular/LIB/hyperel.lib +975 -0
  348. sage_wheels/share/singular/LIB/inout.lib +679 -0
  349. sage_wheels/share/singular/LIB/integralbasis.lib +6224 -0
  350. sage_wheels/share/singular/LIB/interval.lib +1418 -0
  351. sage_wheels/share/singular/LIB/intprog.lib +778 -0
  352. sage_wheels/share/singular/LIB/invar.lib +443 -0
  353. sage_wheels/share/singular/LIB/involut.lib +980 -0
  354. sage_wheels/share/singular/LIB/jacobson.lib +1215 -0
  355. sage_wheels/share/singular/LIB/kskernel.lib +534 -0
  356. sage_wheels/share/singular/LIB/latex.lib +3146 -0
  357. sage_wheels/share/singular/LIB/lejeune.lib +651 -0
  358. sage_wheels/share/singular/LIB/linalg.lib +2040 -0
  359. sage_wheels/share/singular/LIB/locnormal.lib +212 -0
  360. sage_wheels/share/singular/LIB/lrcalc.lib +526 -0
  361. sage_wheels/share/singular/LIB/makedbm.lib +294 -0
  362. sage_wheels/share/singular/LIB/mathml.lib +813 -0
  363. sage_wheels/share/singular/LIB/matrix.lib +1372 -0
  364. sage_wheels/share/singular/LIB/maxlike.lib +1132 -0
  365. sage_wheels/share/singular/LIB/methods.lib +212 -0
  366. sage_wheels/share/singular/LIB/moddiq.lib +322 -0
  367. sage_wheels/share/singular/LIB/modfinduni.lib +181 -0
  368. sage_wheels/share/singular/LIB/modnormal.lib +218 -0
  369. sage_wheels/share/singular/LIB/modprimdec.lib +1278 -0
  370. sage_wheels/share/singular/LIB/modquotient.lib +269 -0
  371. sage_wheels/share/singular/LIB/modstd.lib +1024 -0
  372. sage_wheels/share/singular/LIB/modular.lib +545 -0
  373. sage_wheels/share/singular/LIB/modules.lib +2561 -0
  374. sage_wheels/share/singular/LIB/modwalk.lib +609 -0
  375. sage_wheels/share/singular/LIB/mondromy.lib +1016 -0
  376. sage_wheels/share/singular/LIB/monomialideal.lib +3851 -0
  377. sage_wheels/share/singular/LIB/mprimdec.lib +2353 -0
  378. sage_wheels/share/singular/LIB/mregular.lib +1863 -0
  379. sage_wheels/share/singular/LIB/multigrading.lib +5629 -0
  380. sage_wheels/share/singular/LIB/ncHilb.lib +777 -0
  381. sage_wheels/share/singular/LIB/ncModslimgb.lib +791 -0
  382. sage_wheels/share/singular/LIB/ncalg.lib +16311 -0
  383. sage_wheels/share/singular/LIB/ncall.lib +31 -0
  384. sage_wheels/share/singular/LIB/ncdecomp.lib +468 -0
  385. sage_wheels/share/singular/LIB/ncfactor.lib +13371 -0
  386. sage_wheels/share/singular/LIB/ncfrac.lib +1023 -0
  387. sage_wheels/share/singular/LIB/nchilbert.lib +448 -0
  388. sage_wheels/share/singular/LIB/nchomolog.lib +759 -0
  389. sage_wheels/share/singular/LIB/ncloc.lib +361 -0
  390. sage_wheels/share/singular/LIB/ncpreim.lib +795 -0
  391. sage_wheels/share/singular/LIB/ncrat.lib +2849 -0
  392. sage_wheels/share/singular/LIB/nctools.lib +1887 -0
  393. sage_wheels/share/singular/LIB/nets.lib +1456 -0
  394. sage_wheels/share/singular/LIB/nfmodstd.lib +1000 -0
  395. sage_wheels/share/singular/LIB/nfmodsyz.lib +732 -0
  396. sage_wheels/share/singular/LIB/noether.lib +1106 -0
  397. sage_wheels/share/singular/LIB/normal.lib +8700 -0
  398. sage_wheels/share/singular/LIB/normaliz.lib +2226 -0
  399. sage_wheels/share/singular/LIB/ntsolve.lib +362 -0
  400. sage_wheels/share/singular/LIB/numerAlg.lib +560 -0
  401. sage_wheels/share/singular/LIB/numerDecom.lib +2261 -0
  402. sage_wheels/share/singular/LIB/olga.lib +1933 -0
  403. sage_wheels/share/singular/LIB/orbitparam.lib +351 -0
  404. sage_wheels/share/singular/LIB/parallel.lib +319 -0
  405. sage_wheels/share/singular/LIB/paraplanecurves.lib +3110 -0
  406. sage_wheels/share/singular/LIB/perron.lib +202 -0
  407. sage_wheels/share/singular/LIB/pfd.lib +2223 -0
  408. sage_wheels/share/singular/LIB/phindex.lib +642 -0
  409. sage_wheels/share/singular/LIB/pointid.lib +673 -0
  410. sage_wheels/share/singular/LIB/polybori.lib +1430 -0
  411. sage_wheels/share/singular/LIB/polyclass.lib +525 -0
  412. sage_wheels/share/singular/LIB/polylib.lib +1174 -0
  413. sage_wheels/share/singular/LIB/polymake.lib +1902 -0
  414. sage_wheels/share/singular/LIB/presolve.lib +1533 -0
  415. sage_wheels/share/singular/LIB/primdec.lib +9576 -0
  416. sage_wheels/share/singular/LIB/primdecint.lib +1782 -0
  417. sage_wheels/share/singular/LIB/primitiv.lib +401 -0
  418. sage_wheels/share/singular/LIB/puiseuxexpansions.lib +1631 -0
  419. sage_wheels/share/singular/LIB/purityfiltration.lib +960 -0
  420. sage_wheels/share/singular/LIB/qhmoduli.lib +1561 -0
  421. sage_wheels/share/singular/LIB/qmatrix.lib +293 -0
  422. sage_wheels/share/singular/LIB/random.lib +455 -0
  423. sage_wheels/share/singular/LIB/ratgb.lib +489 -0
  424. sage_wheels/share/singular/LIB/realclassify.lib +5759 -0
  425. sage_wheels/share/singular/LIB/realizationMatroids.lib +772 -0
  426. sage_wheels/share/singular/LIB/realrad.lib +1197 -0
  427. sage_wheels/share/singular/LIB/recover.lib +2628 -0
  428. sage_wheels/share/singular/LIB/redcgs.lib +3984 -0
  429. sage_wheels/share/singular/LIB/reesclos.lib +465 -0
  430. sage_wheels/share/singular/LIB/resbinomial.lib +2802 -0
  431. sage_wheels/share/singular/LIB/resgraph.lib +789 -0
  432. sage_wheels/share/singular/LIB/resjung.lib +820 -0
  433. sage_wheels/share/singular/LIB/resolve.lib +5110 -0
  434. sage_wheels/share/singular/LIB/resources.lib +170 -0
  435. sage_wheels/share/singular/LIB/reszeta.lib +5473 -0
  436. sage_wheels/share/singular/LIB/ring.lib +1328 -0
  437. sage_wheels/share/singular/LIB/ringgb.lib +343 -0
  438. sage_wheels/share/singular/LIB/rinvar.lib +1153 -0
  439. sage_wheels/share/singular/LIB/rootisolation.lib +1481 -0
  440. sage_wheels/share/singular/LIB/rootsmr.lib +709 -0
  441. sage_wheels/share/singular/LIB/rootsur.lib +886 -0
  442. sage_wheels/share/singular/LIB/rstandard.lib +607 -0
  443. sage_wheels/share/singular/LIB/rwalk.lib +336 -0
  444. sage_wheels/share/singular/LIB/sagbi.lib +1353 -0
  445. sage_wheels/share/singular/LIB/sagbiNormaliz.lib +1622 -0
  446. sage_wheels/share/singular/LIB/sagbiNormaliz0.lib +1498 -0
  447. sage_wheels/share/singular/LIB/sagbigrob.lib +449 -0
  448. sage_wheels/share/singular/LIB/schreyer.lib +321 -0
  449. sage_wheels/share/singular/LIB/schubert.lib +2551 -0
  450. sage_wheels/share/singular/LIB/sets.lib +524 -0
  451. sage_wheels/share/singular/LIB/sheafcoh.lib +1663 -0
  452. sage_wheels/share/singular/LIB/signcond.lib +437 -0
  453. sage_wheels/share/singular/LIB/sing.lib +1094 -0
  454. sage_wheels/share/singular/LIB/sing4ti2.lib +419 -0
  455. sage_wheels/share/singular/LIB/solve.lib +2243 -0
  456. sage_wheels/share/singular/LIB/spcurve.lib +1077 -0
  457. sage_wheels/share/singular/LIB/spectrum.lib +62 -0
  458. sage_wheels/share/singular/LIB/sresext.lib +757 -0
  459. sage_wheels/share/singular/LIB/ssi.lib +143 -0
  460. sage_wheels/share/singular/LIB/standard.lib +2769 -0
  461. sage_wheels/share/singular/LIB/stanleyreisner.lib +473 -0
  462. sage_wheels/share/singular/LIB/stdmodule.lib +547 -0
  463. sage_wheels/share/singular/LIB/stratify.lib +1070 -0
  464. sage_wheels/share/singular/LIB/surf.lib +506 -0
  465. sage_wheels/share/singular/LIB/surf_jupyter.lib +223 -0
  466. sage_wheels/share/singular/LIB/surfacesignature.lib +522 -0
  467. sage_wheels/share/singular/LIB/surfex.lib +1462 -0
  468. sage_wheels/share/singular/LIB/swalk.lib +877 -0
  469. sage_wheels/share/singular/LIB/symodstd.lib +1570 -0
  470. sage_wheels/share/singular/LIB/systhreads.lib +74 -0
  471. sage_wheels/share/singular/LIB/tasks.lib +1324 -0
  472. sage_wheels/share/singular/LIB/tateProdCplxNegGrad.lib +2412 -0
  473. sage_wheels/share/singular/LIB/teachstd.lib +858 -0
  474. sage_wheels/share/singular/LIB/template.lib +116 -0
  475. sage_wheels/share/singular/LIB/toric.lib +1119 -0
  476. sage_wheels/share/singular/LIB/transformation.lib +116 -0
  477. sage_wheels/share/singular/LIB/triang.lib +1197 -0
  478. sage_wheels/share/singular/LIB/tropical.lib +8741 -0
  479. sage_wheels/share/singular/LIB/tropicalEllipticCovers.lib +2922 -0
  480. sage_wheels/share/singular/LIB/tropicalNewton.lib +1128 -0
  481. sage_wheels/share/singular/LIB/tst.lib +1108 -0
  482. sage_wheels/share/singular/LIB/weierstr.lib +241 -0
  483. sage_wheels/share/singular/LIB/zeroset.lib +1478 -0
  484. sage_wheels/share/singular/emacs/.emacs-general +184 -0
  485. sage_wheels/share/singular/emacs/.emacs-singular +234 -0
  486. sage_wheels/share/singular/emacs/COPYING +44 -0
  487. sage_wheels/share/singular/emacs/cmd-cmpl.el +241 -0
  488. sage_wheels/share/singular/emacs/ex-cmpl.el +1681 -0
  489. sage_wheels/share/singular/emacs/hlp-cmpl.el +4318 -0
  490. sage_wheels/share/singular/emacs/lib-cmpl.el +179 -0
  491. sage_wheels/share/singular/emacs/singular.el +4273 -0
  492. sage_wheels/share/singular/emacs/singular.xpm +39 -0
  493. sage_wheels/share/singular/singular.idx +5002 -0
@@ -0,0 +1,1663 @@
1
+ ///////////////////////////////////////////////////////////////////////////
2
+ version="version sheafcoh.lib 4.3.2.9 Oct_2023 "; // $Id: b6b35d4e6fc492c4290ac6f67b80e97ac4ae0db8 $
3
+ category="Commutative Algebra";
4
+ info="
5
+ LIBRARY: sheafcoh.lib Procedures for Computing Sheaf Cohomology
6
+ AUTHORS: Wolfram Decker, decker@mathematik.uni-kl.de
7
+ Christoph Lossen, lossen@mathematik.uni-kl.de
8
+ Gerhard Pfister, pfister@mathematik.uni-kl.de
9
+ Oleksandr Motsak, U@D, where U={motsak}, D={mathematik.uni-kl.de}
10
+
11
+ PROCEDURES:
12
+ truncate(phi,d); truncation of coker(phi) at d
13
+ truncateFast(phi,d); truncation of coker(phi) at d (fast+ experimental)
14
+ CM_regularity(M); Castelnuovo-Mumford regularity of coker(M)
15
+ sheafCohBGG(M,l,h); cohomology of sheaf associated to coker(M)
16
+ sheafCohBGGregul(M,l,h,r); cohomology of sheaf associated to coker(M)
17
+ with given regularity
18
+ sheafCohBGGregul_w(M,l,h,r,w); cohomology with given module weights
19
+ sheafCohBGG2(M,l,h); cohomology of sheaf associated to coker(M), experimental version
20
+ sheafCoh(M,l,h); cohomology of sheaf associated to coker(M)
21
+ sheafCoh_w(M,l,h); cohomology of coker(M) with given module weights
22
+ dimH(i,M,d); compute h^i(F(d)), F sheaf associated to coker(M)
23
+ dimGradedPart()
24
+
25
+ displayCohom(B,l,h,n); display intmat as Betti diagram (with zero rows)
26
+
27
+ KEYWORDS: sheaf cohomology
28
+ ";
29
+
30
+ ///////////////////////////////////////////////////////////////////////////////
31
+ LIB "matrix.lib";
32
+ LIB "nctools.lib";
33
+ LIB "homolog.lib";
34
+
35
+
36
+ ///////////////////////////////////////////////////////////////////////////////
37
+ static proc jacobM(matrix M)
38
+ {
39
+ int n=nvars(basering);
40
+ matrix B=transpose(diff(M,var(1)));
41
+ int i;
42
+ for(i=2;i<=n;i++)
43
+ {
44
+ B=concat(B,transpose(diff(M,var(i))));
45
+ }
46
+ return(transpose(B));
47
+ }
48
+
49
+
50
+ ///////////////////////////////////////////////////////////////////////////////
51
+ /**
52
+ let M = { w_1, ..., w_k }, k = size(M) == ncols(M), n = nvars(currRing).
53
+ assuming that nrows(M) <= m*n;
54
+ computes transpose(M) * transpose( var(1) I_m | ... | var(n) I_m ) :== transpose(module{f_1, ... f_k}),
55
+ where f_i = \sum_{j=1}^{m} (w_i, v_j) gen(j), (w_i, v_j) is a `scalar` multiplication.
56
+ that is, if w_i = (a^1_1, ... a^1_m) | (a^2_1, ..., a^2_m) | ... | (a^n_1, ..., a^n_m) then
57
+
58
+ (a^1_1, ... a^1_m) | (a^2_1, ..., a^2_m) | ... | (a^n_1, ..., a^n_m)
59
+ * var_1 ... var_1 | var_2 ... var_2 | ... | var_n ... var(n)
60
+ * gen_1 ... gen_m | gen_1 ... gen_m | ... | gen_1 ... gen_m
61
+ + =>
62
+ f_i =
63
+
64
+ a^1_1 * var(1) * gen(1) + ... + a^1_m * var(1) * gen(m) +
65
+ a^2_1 * var(2) * gen(1) + ... + a^2_m * var(2) * gen(m) +
66
+ ...
67
+ a^n_1 * var(n) * gen(1) + ... + a^n_m * var(n) * gen(m);
68
+
69
+ NOTE: for every f_i we run only ONCE along w_i saving partial sums into a temporary array of polys of size m
70
+
71
+ */
72
+ static proc TensorModuleMult(int m, module M)
73
+ {
74
+ return( system("tensorModuleMult", m, M) ); // trick!
75
+
76
+ int n = nvars(basering);
77
+ int k = ncols(M);
78
+
79
+ int g, cc, vv;
80
+
81
+ poly h;
82
+
83
+ module Temp; // = {f_1, ..., f_k }
84
+
85
+ intvec exp;
86
+ vector pTempSum, w;
87
+
88
+ for( int i = k; i > 0; i-- ) // for every w \in M
89
+ {
90
+ pTempSum[m] = 0;
91
+ w = M[i];
92
+
93
+ while(w != 0) // for each term of w...
94
+ {
95
+ exp = leadexp(w);
96
+ g = exp[n+1]; // module component!
97
+ h = w[g];
98
+
99
+ w = w - h * gen(g);
100
+
101
+ cc = g % m;
102
+
103
+ if( cc == 0)
104
+ {
105
+ cc = m;
106
+ }
107
+
108
+ vv = 1 + (g - cc) / m;
109
+
110
+ pTempSum = pTempSum + h * var(vv) * gen(cc);
111
+ }
112
+
113
+ Temp[i] = pTempSum;
114
+ }
115
+
116
+ Temp = transpose(Temp);
117
+
118
+ return(Temp);
119
+ }
120
+
121
+ ///////////////////////////////////////////////////////////////////////////////
122
+ proc truncate(module phi, int d)
123
+ "USAGE: truncate(M,d); M module, d int
124
+ ASSUME: @code{M} is graded, and it comes assigned with an admissible degree
125
+ vector as an attribute
126
+ RETURN: module
127
+ NOTE: Output is a presentation matrix for the truncation of coker(M)
128
+ at degree d.
129
+ EXAMPLE: example truncate; shows an example
130
+ KEYWORDS: truncated module
131
+ "
132
+ {
133
+ if ( typeof(attrib(phi,"isHomog"))=="string" )
134
+ {
135
+ if (size(phi)==0)
136
+ {
137
+ // assign weights 0 to generators of R^n (n=nrows(phi))
138
+ intvec v;
139
+ v[nrows(phi)]=0;
140
+ attrib(phi,"isHomog",v);
141
+ }
142
+ else
143
+ {
144
+ ERROR("No admissible degree vector assigned");
145
+ }
146
+ }
147
+ else
148
+ {
149
+ intvec v=attrib(phi,"isHomog");
150
+ }
151
+ int i,m,dummy;
152
+ int s = nrows(phi);
153
+ module L; // TOO BIG!!!
154
+ for (i=1; i<=s; i++)
155
+ {
156
+ if (d>v[i])
157
+ {
158
+ L = L+maxideal(d-v[i])*gen(i);
159
+ }
160
+ else
161
+ {
162
+ L = L+gen(i);
163
+ }
164
+ }
165
+ L = modulo(L,phi);
166
+ L = minbase(prune(L));
167
+ if (size(L)==0) {return(L);}
168
+
169
+ // it only remains to set the degrees for L:
170
+ // ------------------------------------------
171
+ m = v[1];
172
+ for(i=2; i<=size(v); i++) { if(v[i]<m) { m = v[i]; } }
173
+ dummy = homog(L);
174
+ intvec vv = attrib(L,"isHomog");
175
+ if (d>m) { vv = vv+d; }
176
+ else { vv = vv+m; }
177
+ attrib(L,"isHomog",vv);
178
+ return(L);
179
+ }
180
+ example
181
+ {"EXAMPLE:";
182
+ echo = 2;
183
+ ring R=0,(x,y,z),dp;
184
+ module M=maxideal(3);
185
+ homog(M);
186
+ // compute presentation matrix for truncated module (R/<x,y,z>^3)_(>=2)
187
+ module M2=truncate(M,2);
188
+ print(M2);
189
+ dimGradedPart(M2,1);
190
+ dimGradedPart(M2,2);
191
+ // this should coincide with:
192
+ dimGradedPart(M,2);
193
+ // shift grading by 1:
194
+ intvec v=1;
195
+ attrib(M,"isHomog",v);
196
+ M2=truncate(M,2);
197
+ print(M2);
198
+ dimGradedPart(M2,3);
199
+ }
200
+
201
+ ///////////////////////////////////////////////////////////////////////////////
202
+
203
+ proc truncateFast(module M, int d)
204
+ "USAGE: truncateFast(M,d); M module, d int
205
+ ASSUME: @code{M} is graded, and it comes assigned with an admissible degree
206
+ vector as an attribute 'isHomog'
207
+ RETURN: module
208
+ NOTE: Output is a presentation matrix for the truncation of coker(M)
209
+ at d.
210
+ Fast + experimental version. M should be a SB!
211
+ DISPLAY: If @code{printlevel}>=1, step-by step timings will be printed.
212
+ If @code{printlevel}>=2 we add progress debug messages
213
+ if @code{printlevel}>=3, even all intermediate results...
214
+ EXAMPLE: example truncateFast; shows an example
215
+ KEYWORDS: truncated module
216
+ "
217
+ {
218
+ // int PL = printlevel + 1;
219
+ int PL = printlevel - voice + 2;
220
+
221
+ dbprint(PL-1, "// truncateFast(M: "+ string(nrows(M)) + " x " + string(ncols(M)) +", " + string(d) + "):");
222
+ dbprint(PL-2, M);
223
+
224
+ intvec save = option(get);
225
+ if( PL >= 2 )
226
+ {
227
+ option(prot);
228
+ option(mem);
229
+ }
230
+
231
+ int tTruncateBegin=timer;
232
+
233
+ if (attrib(M,"isSB")!=1)
234
+ {
235
+ M = std(M);
236
+ }
237
+
238
+ dbprint(PL-1, "// M is a SB! ");
239
+
240
+ if ( typeof(attrib(M,"isHomog"))=="string" )
241
+ {
242
+ if (size(M)==0)
243
+ {
244
+ // assign weights 0 to generators of R^n (n=nrows(M))
245
+ intvec v;
246
+ v[nrows(M)]=0;
247
+ attrib(M,"isHomog",v);
248
+ }
249
+ else
250
+ {
251
+ ERROR("No admissible degree vector assigned");
252
+ }
253
+ }
254
+ else
255
+ {
256
+ intvec v=attrib(M,"isHomog");
257
+ }
258
+
259
+ dbprint(PL-1, "// weighting(M): ["+ string(v) + "]");
260
+
261
+ int i,m,dummy;
262
+ int s = nrows(M);
263
+
264
+ int tKBaseBegin = timer;
265
+ module L = kbase(M, d); // TODO: check whether this is always correct!?!
266
+
267
+ dbprint(PL-1, "// L = kbase(M,d): "+string(nrows(L)) + " x " + string(ncols(L)) +"");
268
+ dbprint(PL-2, L);
269
+ dbprint(PL-1, "// weighting(L): ["+ string(attrib(L, "isHomog")) + "]");
270
+
271
+ int tModuloBegin = timer;
272
+ L = modulo(L,M);
273
+
274
+ dbprint(PL-1, "// L = modulo(L,M): "+string(nrows(L)) + " x " + string(ncols(L)) +"");
275
+ dbprint(PL-2, L);
276
+ dbprint(PL-1, "// weighting(L): ["+ string(attrib(L, "isHomog")) + "]");
277
+
278
+ int tPruneBegin = timer;
279
+ L = prune(L);
280
+
281
+ dbprint(PL-1, "// L = prune(L): "+string(nrows(L)) + " x " + string(ncols(L)) +"");
282
+ dbprint(PL-2, L);
283
+ dbprint(PL-1, "// weighting(L): ["+ string(attrib(L, "isHomog")) + "]");
284
+
285
+ int tPruneEnd = timer;
286
+ L = minbase(L);
287
+ int tMinBaseEnd = timer;
288
+
289
+ dbprint(PL-1, "// L = minbase(L): "+string(nrows(L)) + " x " + string(ncols(L)) +"");
290
+ dbprint(PL-2, L);
291
+ dbprint(PL-1, "// weighting(L): ["+ string(attrib(L, "isHomog")) + "]");
292
+
293
+ if (size(L)!=0)
294
+ {
295
+ // it only remains to set the degrees for L:
296
+ // ------------------------------------------
297
+ m = v[1];
298
+ for(i=2; i<=size(v); i++) { if(v[i]<m) { m = v[i]; } }
299
+ dummy = homog(L);
300
+ intvec vv = attrib(L,"isHomog");
301
+ if (d>m) { vv = vv+d; }
302
+ else { vv = vv+m; }
303
+ attrib(L,"isHomog",vv);
304
+ }
305
+
306
+ int tTruncateEnd=timer;
307
+
308
+ dbprint(PL-1, "// corrected weighting(L): ["+ string(attrib(L, "isHomog")) + "]");
309
+
310
+ if(PL > 0)
311
+ {
312
+ "
313
+ -------------- TIMINGS --------------
314
+ Trunc Time: ", tTruncateEnd - tTruncateBegin, "
315
+ :: Before .Time: ", tKBaseBegin - tTruncateBegin, "
316
+ :: kBase Time: ", tModuloBegin - tKBaseBegin, "
317
+ :: Modulo Time: ", tPruneBegin - tModuloBegin, "
318
+ :: Prune Time: ", tPruneEnd - tPruneBegin, "
319
+ :: Minbase Time: ", tMinBaseEnd - tPruneEnd, "
320
+ :: After .Time: ", tTruncateEnd - tMinBaseEnd;
321
+ }
322
+
323
+ option(set, save);
324
+ return(L);
325
+ }
326
+ example
327
+ {"EXAMPLE:";
328
+ echo = 2;
329
+ ring R=0,(x,y,z,u,v),dp;
330
+ module M=maxideal(3);
331
+ homog(M);
332
+ // compute presentation matrix for truncated module (R/<x,y,z,u>^3)_(>=2)
333
+ int t=timer;
334
+ module M2t=truncate(M,2);
335
+ t = timer - t;
336
+ "// Simple truncate: ", t;
337
+ t=timer;
338
+ module M2=truncateFast(std(M),2);
339
+ t = timer - t;
340
+ "// Fast truncate: ", t;
341
+ print(M2);
342
+ "// Check: M2t == M2?: ", size(NF(M2, std(M2t))) + size(NF(M2t, std(M2)));
343
+
344
+ dimGradedPart(M2,1);
345
+ dimGradedPart(M2,2);
346
+ // this should coincide with:
347
+ dimGradedPart(M,2);
348
+ // shift grading by 1:
349
+ intvec v=1;
350
+ attrib(M,"isHomog",v);
351
+ t=timer;
352
+ M2t=truncate(M,2);
353
+ t = timer - t;
354
+ "// Simple truncate: ", t;
355
+ t=timer;
356
+ M2=truncateFast(std(M),2);
357
+ t = timer - t;
358
+ "// Fast truncate: ", t;
359
+ print(M2);
360
+ "// Check: M2t == M2?: ", size(NF(M2, std(M2t))) + size(NF(M2t, std(M2))); //?
361
+ dimGradedPart(M2,3);
362
+ }
363
+
364
+ ///////////////////////////////////////////////////////////////////////////////
365
+
366
+ proc dimGradedPart(module phi, int d)
367
+ "USAGE: dimGradedPart(M,d); M module, d int
368
+ ASSUME: @code{M} is graded, and it comes assigned with an admissible degree
369
+ vector as an attribute
370
+ RETURN: int
371
+ NOTE: Output is the vector space dimension of the graded part of degree d
372
+ of coker(M).
373
+ EXAMPLE: example dimGradedPart; shows an example
374
+ KEYWORDS: graded module, graded piece
375
+ "
376
+ {
377
+ if ( typeof(attrib(phi,"isHomog"))=="string" )
378
+ {
379
+ if (size(phi)==0)
380
+ {
381
+ // assign weights 0 to generators of R^n (n=nrows(phi))
382
+ intvec v;
383
+ v[nrows(phi)]=0;
384
+ }
385
+ else { ERROR("No admissible degree vector assigned"); }
386
+ }
387
+ else
388
+ {
389
+ intvec v=attrib(phi,"isHomog");
390
+ }
391
+ int s = nrows(phi);
392
+ int i,m,dummy;
393
+ module L,LL;
394
+ for (i=1; i<=s; i++)
395
+ {
396
+ if (d>v[i])
397
+ {
398
+ L = L+maxideal(d-v[i])*gen(i);
399
+ LL = LL+maxideal(d+1-v[i])*gen(i);
400
+ }
401
+ else
402
+ {
403
+ L = L+gen(i);
404
+ if (d==v[i])
405
+ {
406
+ LL = LL+maxideal(1)*gen(i);
407
+ }
408
+ else
409
+ {
410
+ LL = LL+gen(i);
411
+ }
412
+ }
413
+ }
414
+ LL=LL,phi;
415
+ L = modulo(L,LL);
416
+ L = std(prune(L));
417
+ if (size(L)==0) {return(0);}
418
+ return(vdim(L));
419
+ }
420
+ example
421
+ {"EXAMPLE:";
422
+ echo = 2;
423
+ ring R=0,(x,y,z),dp;
424
+ module M=maxideal(3);
425
+ // assign compatible weight vector (here: 0)
426
+ homog(M);
427
+ // compute dimension of graded pieces of R/<x,y,z>^3 :
428
+ dimGradedPart(M,0);
429
+ dimGradedPart(M,1);
430
+ dimGradedPart(M,2);
431
+ dimGradedPart(M,3);
432
+ // shift grading:
433
+ attrib(M,"isHomog",intvec(2));
434
+ dimGradedPart(M,2);
435
+ }
436
+
437
+ ///////////////////////////////////////////////////////////////////////////////
438
+
439
+ proc CM_regularity (module M)
440
+ "USAGE: CM_regularity(M); M module
441
+ ASSUME: @code{M} is graded, and it comes assigned with an admissible degree
442
+ vector as an attribute
443
+ RETURN: integer, the Castelnuovo-Mumford regularity of coker(M)
444
+ NOTE: procedure calls mres
445
+ EXAMPLE: example CM_regularity; shows an example
446
+ KEYWORDS: Castelnuovo-Mumford regularity
447
+ "
448
+ {
449
+ if ( typeof(attrib(M,"isHomog"))=="string" )
450
+ {
451
+ if (size(M)==0)
452
+ {
453
+ // assign weights 0 to generators of R^n (n=nrows(M))
454
+ intvec v;
455
+ v[nrows(M)]=0;
456
+ attrib(M,"isHomog",v);
457
+ }
458
+ else
459
+ {
460
+ ERROR("No admissible degree vector assigned");
461
+ }
462
+ }
463
+
464
+ if( attrib(CM_regularity,"Algorithm") == "minres_res" )
465
+ {
466
+ def L = minres( res(M,0) ); // let's try it out!
467
+ }
468
+ else
469
+ {
470
+ def L = mres(M,0);
471
+ }
472
+
473
+ intmat BeL = betti(L);
474
+ int r = nrows(module(matrix(BeL))); // last non-zero row
475
+ if (typeof(attrib(BeL,"rowShift"))!="string")
476
+ {
477
+ int shift = attrib(BeL,"rowShift");
478
+ }
479
+ return(r+shift-1);
480
+ }
481
+ example
482
+ {"EXAMPLE:";
483
+ echo = 2;
484
+ ring R=0,(x,y,z,u),dp;
485
+ resolution T1=mres(maxideal(1),0);
486
+ module M=T1[3];
487
+ intvec v=2,2,2,2,2,2;
488
+ attrib(M,"isHomog",v);
489
+ CM_regularity(M);
490
+ }
491
+
492
+ ///////////////////////////////////////////////////////////////////////////////
493
+ proc sheafCohBGG(module M,int l,int h)
494
+ "USAGE: sheafCohBGG(M,l,h); M module, l,h int
495
+ ASSUME: @code{M} is graded, and it comes assigned with an admissible degree
496
+ vector as an attribute, @code{h>=l}, and the basering has @code{n+1}
497
+ variables.
498
+ RETURN: intmat, cohomology of twists of the coherent sheaf F on P^n
499
+ associated to coker(M). The range of twists is determined by @code{l},
500
+ @code{h}.
501
+ DISPLAY: The intmat is displayed in a diagram of the following form:
502
+ with @code{displayCohom(A,l,h,nvars(r)-1);}@*
503
+ @format
504
+ l l+1 h
505
+ ----------------------------------------------------------
506
+ n: h^n(F(l)) h^n(F(l+1)) ...... h^n(F(h))
507
+ ...............................................
508
+ 1: h^1(F(l)) h^1(F(l+1)) ...... h^1(F(h))
509
+ 0: h^0(F(l)) h^0(F(l+1)) ...... h^0(F(h))
510
+ ----------------------------------------------------------
511
+ chi: chi(F(l)) chi(F(l+1)) ...... chi(F(h))
512
+ @end format
513
+ A @code{'-'} in the diagram refers to a zero entry; a @code{'*'}
514
+ refers to a negative entry (= dimension not yet determined).
515
+ refers to a not computed dimension. @*
516
+ NOTE: This procedure is based on the Bernstein-Gel'fand-Gel'fand
517
+ correspondence and on Tate resolution ( see [Eisenbud, Floystad,
518
+ Schreyer: Sheaf cohomology and free resolutions over exterior
519
+ algebras, Trans AMS 355 (2003)] ).@*
520
+ @code{sheafCohBGG(M,l,h)} does not compute all values in the above
521
+ table. To determine all values of @code{h^i(F(d))}, @code{d=l..h},
522
+ use @code{sheafCohBGG(M,l-n,h+n)}.
523
+ SEE ALSO: sheafCoh, dimH, displayCohom
524
+ EXAMPLE: example sheafCohBGG; shows an example
525
+ "
526
+ {
527
+ int i,j,k,row,col;
528
+ if( typeof(attrib(M,"isHomog"))!="intvec" )
529
+ {
530
+ if (size(M)==0) { attrib(M,"isHomog",0); }
531
+ else { ERROR("No admissible degree vector assigned"); }
532
+ }
533
+ int n=nvars(basering)-1;
534
+ int ell=l+n;
535
+ def R=basering;
536
+ int reg = CM_regularity(M);
537
+ int bound=max(reg+1,h-1);
538
+ module MT=truncate(M,bound);
539
+ int m=nrows(MT);
540
+ MT=transpose(jacobM(MT));
541
+ MT=syz(MT);
542
+ matrix ML[n+1][1]=maxideal(1);
543
+ matrix S=transpose(outer(ML,unitmat(m)));
544
+ matrix SS=transpose(S*MT);
545
+ //--- to the exterior algebra
546
+ def AR = Exterior();
547
+ setring AR;
548
+ intvec saveopt=option(get);
549
+ option(redSB);
550
+ option(redTail);
551
+ module EM=imap(R,SS);
552
+ intvec w;
553
+ //--- here we are with our matrix
554
+ int bound1=max(1,bound-ell+1);
555
+ for (i=1; i<=nrows(EM); i++)
556
+ {
557
+ w[i]=-bound-1;
558
+ }
559
+ attrib(EM,"isHomog",w);
560
+ resolution RE=mres(EM,bound1);
561
+ intmat Betti=betti(RE);
562
+ k=ncols(Betti);
563
+ row=nrows(Betti);
564
+ int shift=attrib(Betti,"rowShift")+(k+ell-1);
565
+ intmat newBetti[n+1][h-l+1];
566
+ for (j=1; j<=row; j++)
567
+ {
568
+ for (i=l; i<=h; i++)
569
+ {
570
+ if (((n+2-shift-j)>0)&&((n+2-shift-j)<=(n+1))
571
+ && ((i-l+1)>0)&&((i-l+1)<=(h-l+1)))
572
+ {
573
+ if ((k+1-j-i+ell-shift>0) and (j+i-ell+shift>=1))
574
+ {
575
+ newBetti[n+2-shift-j,i-l+1]=Betti[j,k+1-j-i+ell-shift];
576
+ }
577
+ else
578
+ {
579
+ newBetti[n+2-shift-j,i-l+1]=-1;
580
+ }
581
+ }
582
+ }
583
+ }
584
+ for (j=2; j<=n+1; j++)
585
+ {
586
+ for (i=1; i<j; i++)
587
+ {
588
+ newBetti[j,i]=-1;
589
+ }
590
+ }
591
+ int d=k-h+ell-1;
592
+ for (j=1; j<=n; j++)
593
+ {
594
+ for (i=h-l+1; i>=k+j; i--)
595
+ {
596
+ newBetti[j,i]=-1;
597
+ }
598
+ }
599
+ option(set,saveopt);
600
+ setring R;
601
+ return(newBetti);
602
+ }
603
+ example
604
+ {"EXAMPLE:";
605
+ echo = 2;
606
+ // cohomology of structure sheaf on P^4:
607
+ //-------------------------------------------
608
+ ring r=0,x(1..5),dp;
609
+ module M=0;
610
+ intmat A=sheafCohBGG(M,-9,4);
611
+ A;
612
+ displayCohom(A,-9,4,nvars(r)-1);
613
+ // cohomology of cotangential bundle on P^3:
614
+ //-------------------------------------------
615
+ ring R=0,(x,y,z,u),dp;
616
+ resolution T1=mres(maxideal(1),0);
617
+ module M=T1[3];
618
+ intvec v=2,2,2,2,2,2;
619
+ attrib(M,"isHomog",v);
620
+ intmat B=sheafCohBGG(M,-8,4);
621
+ B;
622
+ displayCohom(B,-8,4,nvars(R)-1);
623
+ }
624
+ proc sheafCohBGGregul(module M,int l,int h, int reg)
625
+ "USAGE: sheafCohBGGregul(M,l,h); M module, l,h int, reg int
626
+ ASSUME: @code{M} is graded, and it comes assigned with an admissible degree
627
+ vector as an attribute, @code{h>=l}, and the basering has @code{n+1}
628
+ variables.
629
+ RETURN: intmat, cohomology of twists of the coherent sheaf F on P^n
630
+ associated to coker(M). The range of twists is determined by @code{l},
631
+ @code{h}.
632
+ NOTE: This procedure is based on the Bernstein-Gel'fand-Gel'fand
633
+ correspondence and on Tate resolution ( see [Eisenbud, Floystad,
634
+ Schreyer: Sheaf cohomology and free resolutions over exterior
635
+ algebras, Trans AMS 355 (2003)] ).@*
636
+ @code{sheafCohBGG(M,l,h)} does not compute all values in the above
637
+ table. To determine all values of @code{h^i(F(d))}, @code{d=l..h},
638
+ use @code{sheafCohBGG(M,l-n,h+n)}.
639
+ SEE ALSO: sheafCoh, dimH, displayCohom
640
+ EXAMPLE: example sheafCohBGGregul; shows an example
641
+ "
642
+ {
643
+ int i,j,k,row,col;
644
+ if( typeof(attrib(M,"isHomog"))!="intvec" )
645
+ {
646
+ if (size(M)==0) { attrib(M,"isHomog",0); }
647
+ else { ERROR("No admissible degree vector assigned"); }
648
+ }
649
+ int n=nvars(basering)-1;
650
+ int ell=l+n;
651
+ def R=basering;
652
+ int bound=max(reg+1,h-1);
653
+ module MT=truncate(M,bound);
654
+ int m=nrows(MT);
655
+ MT=transpose(jacobM(MT));
656
+ MT=syz(MT);
657
+ matrix ML[n+1][1]=maxideal(1);
658
+ matrix S=transpose(outer(ML,unitmat(m)));
659
+ matrix SS=transpose(S*MT);
660
+ //--- to the exterior algebra
661
+ def AR = Exterior();
662
+ setring AR;
663
+ intvec saveopt=option(get);
664
+ option(redSB);
665
+ option(redTail);
666
+ module EM=imap(R,SS);
667
+ intvec w;
668
+ //--- here we are with our matrix
669
+ int bound1=max(1,bound-ell+1);
670
+ for (i=1; i<=nrows(EM); i++)
671
+ {
672
+ w[i]=-bound-1;
673
+ }
674
+ attrib(EM,"isHomog",w);
675
+ resolution RE=mres(EM,bound1);
676
+ intmat Betti=betti(RE);
677
+ k=ncols(Betti);
678
+ row=nrows(Betti);
679
+ int shift=attrib(Betti,"rowShift")+(k+ell-1);
680
+ intmat newBetti[n+1][h-l+1];
681
+ for (j=1; j<=row; j++)
682
+ {
683
+ for (i=l; i<=h; i++)
684
+ {
685
+ if ((k+1-j-i+ell-shift>0) and (j+i-ell+shift>=1))
686
+ {
687
+ newBetti[n+2-shift-j,i-l+1]=Betti[j,k+1-j-i+ell-shift];
688
+ }
689
+ else { newBetti[n+2-shift-j,i-l+1]=-1; }
690
+ }
691
+ }
692
+ for (j=2; j<=n+1; j++)
693
+ {
694
+ for (i=1; i<j; i++)
695
+ {
696
+ newBetti[j,i]=-1;
697
+ }
698
+ }
699
+ int d=k-h+ell-1;
700
+ for (j=1; j<=n; j++)
701
+ {
702
+ for (i=h-l+1; i>=k+j; i--)
703
+ {
704
+ newBetti[j,i]=-1;
705
+ }
706
+ }
707
+ option(set,saveopt);
708
+ setring R;
709
+ return(newBetti);
710
+ }
711
+ example
712
+ {"EXAMPLE:";
713
+ echo = 2;
714
+ // cohomology of structure sheaf on P^4:
715
+ //-------------------------------------------
716
+ ring r=0,x(1..5),dp;
717
+ module M=0;
718
+ def A=sheafCohBGGregul(M,-9,4,CM_regularity(M));
719
+ A;
720
+ // cohomology of cotangential bundle on P^3:
721
+ //-------------------------------------------
722
+ ring R=0,(x,y,z,u),dp;
723
+ resolution T1=mres(maxideal(1),0);
724
+ module M=T1[3];
725
+ intvec v=2,2,2,2,2,2;
726
+ attrib(M,"isHomog",v);
727
+ def B=sheafCohBGGregul(M,-8,4,CM_regularity(M));
728
+ B;
729
+ }
730
+
731
+ proc sheafCohBGGregul_w(module M,int l,int h,int regul, intvec w)
732
+ "USAGE: sheafCohBGGregul_w(M,l,h,w); M module, l,h int, reg int, w intvec
733
+ ASSUME: @code{M} is graded, and it comes assigned with an admissible degree
734
+ vector w, @code{h>=l}, and the basering has @code{n+1}
735
+ variables.
736
+ RETURN: intmat, cohomology of twists of the coherent sheaf F on P^n
737
+ associated to coker(M). The range of twists is determined by @code{l},
738
+ @code{h}.
739
+ NOTE: This procedure is based on the Bernstein-Gel'fand-Gel'fand
740
+ correspondence and on Tate resolution ( see [Eisenbud, Floystad,
741
+ Schreyer: Sheaf cohomology and free resolutions over exterior
742
+ algebras, Trans AMS 355 (2003)] ).@*
743
+ @code{sheafCohBGG(M,l,h)} does not compute all values in the above
744
+ table. To determine all values of @code{h^i(F(d))}, @code{d=l..h},
745
+ use @code{sheafCohBGG(M,l-n,h+n)}.
746
+ SEE ALSO: sheafCoh, dimH, displayCohom
747
+ EXAMPLE: example sheafCohBGGregul_w; shows an example
748
+ "
749
+ {
750
+ attrib(M,"isHomog",w);
751
+ return(sheafCohBGGregul(M,l,h,regul));
752
+ }
753
+ example
754
+ {"EXAMPLE:";
755
+ echo = 2;
756
+ // cohomology of cotangential bundle on P^3:
757
+ //-------------------------------------------
758
+ ring R=0,(x,y,z,u),dp;
759
+ resolution T1=mres(maxideal(1),0);
760
+ module M=T1[3];
761
+ intvec v=2,2,2,2,2,2;
762
+ def B=sheafCohBGGregul_w(M,-8,4,CM_regularity(M),v);
763
+ B;
764
+ }
765
+
766
+
767
+ ///////////////////////////////////////////////////////////////////////////////
768
+ static proc showResult( def R, int l, int h )
769
+ {
770
+ int PL = 1; // printlevel - voice + 2;
771
+ // int PL = printlevel + 1;
772
+
773
+ intmat Betti;
774
+ if(typeof(R)=="resolution")
775
+ {
776
+ Betti = betti(R);
777
+ }
778
+ else
779
+ {
780
+ if(typeof(R)!="intmat")
781
+ {
782
+ ERROR("Wrong input!!!");
783
+ }
784
+
785
+ Betti = R;
786
+ }
787
+
788
+ int n=nvars(basering)-1;
789
+ int ell = l + n;
790
+
791
+ int k = ncols(Betti);
792
+ int row = nrows(Betti);
793
+ int shift = attrib(Betti,"rowShift") + (k + ell - 1);
794
+
795
+ int iWTH = h-l+1;
796
+
797
+ int d = k - h + ell - 1;
798
+
799
+ if( PL > 1 )
800
+ {
801
+ "// l: ", l;
802
+ "// h: ", h;
803
+ "// n: ", n;
804
+ "// ell: ", ell;
805
+ "// k: ", k;
806
+ "// row: ", row;
807
+ "// shift: ", shift;
808
+ "// iWTH: ", iWTH;
809
+ "// d: ", d;
810
+ }
811
+
812
+ intmat newBetti[ n + 1 ][ iWTH ];
813
+ int i, j;
814
+
815
+ for (j=1; j<=row; j++)
816
+ {
817
+ for (i=l; i<=h; i++)
818
+ {
819
+ if( (n+2-shift-j)>0 )
820
+ {
821
+ if ( (k+1-j-i+ell-shift>0) and (j+i-ell+shift>=1))
822
+ {
823
+ newBetti[n+2-shift-j,i-l+1]=Betti[j,k+1-j-i+ell-shift];
824
+ }
825
+ else { newBetti[n+2-shift-j,i-l+1]=-1; }
826
+ }
827
+ }
828
+ }
829
+
830
+ for (j=2; j<=n+1; j++)
831
+ {
832
+ for (i=1; i<min(j, iWTH); i++)
833
+ {
834
+ newBetti[j,i]= -1;
835
+ }
836
+ }
837
+
838
+ for (j=1; j<=n; j++)
839
+ {
840
+ for (i=iWTH; i>=k+j; i--)
841
+ {
842
+ newBetti[j,i]=0; // -1;
843
+ }
844
+ }
845
+
846
+ if( PL > 0 )
847
+ {
848
+ "Cohomology table:";
849
+ displayCohom(newBetti, l, h, n);
850
+ }
851
+ return(newBetti);
852
+ }
853
+ ///////////////////////////////////////////////////////////////////////////////
854
+
855
+
856
+
857
+ ///////////////////////////////////////////////////////////////////////////////
858
+ proc sheafCohBGG2(module M,int l,int h)
859
+ "USAGE: sheafCohBGG2(M,l,h); M module, l,h int
860
+ ASSUME: @code{M} is graded, and it comes assigned with an admissible degree
861
+ vector as an attribute, @code{h>=l}, and the basering has @code{n+1}
862
+ variables.
863
+ RETURN: intmat, cohomology of twists of the coherent sheaf F on P^n
864
+ associated to coker(M). The range of twists is determined by @code{l},
865
+ @code{h}.
866
+ DISPLAY: The intmat is displayed in a diagram of the following form:
867
+ with @code{displayCohom(A,l,h,nvars(r)-1);}@*
868
+ @format
869
+ l l+1 h
870
+ ----------------------------------------------------------
871
+ n: h^n(F(l)) h^n(F(l+1)) ...... h^n(F(h))
872
+ ...............................................
873
+ 1: h^1(F(l)) h^1(F(l+1)) ...... h^1(F(h))
874
+ 0: h^0(F(l)) h^0(F(l+1)) ...... h^0(F(h))
875
+ ----------------------------------------------------------
876
+ chi: chi(F(l)) chi(F(l+1)) ...... chi(F(h))
877
+ @end format
878
+ A @code{'-'} in the diagram refers to a zero entry; a @code{'*'}
879
+ refers to a negative entry (= dimension not yet determined).
880
+ refers to a not computed dimension. @*
881
+ If @code{printlevel}>=1, step-by step timings will be printed.
882
+ If @code{printlevel}>=2 we add progress debug messages
883
+ if @code{printlevel}>=3, even all intermediate results...
884
+ NOTE: This procedure is based on the Bernstein-Gel'fand-Gel'fand
885
+ correspondence and on Tate resolution ( see [Eisenbud, Floystad,
886
+ Schreyer: Sheaf cohomology and free resolutions over exterior
887
+ algebras, Trans AMS 355 (2003)] ).@*
888
+ @code{sheafCohBGG(M,l,h)} does not compute all values in the above
889
+ table. To determine all values of @code{h^i(F(d))}, @code{d=l..h},
890
+ use @code{sheafCohBGG(M,l-n,h+n)}.
891
+ Experimental version. Should require less memory.
892
+ SEE ALSO: sheafCohBGG, displayCohom
893
+ EXAMPLE: example sheafCohBGG2; shows an example
894
+ "
895
+ {
896
+ int PL = printlevel - voice + 2;
897
+ // int PL = printlevel;
898
+
899
+ dbprint(PL-1, "// sheafCohBGG2(M: "+ string(nrows(M)) + " x " + string(ncols(M)) +", " + string(l) + ", " + string(h) + "):");
900
+ dbprint(PL-2, M);
901
+
902
+ intvec save = option(get);
903
+
904
+ if( PL >= 2 )
905
+ {
906
+ option(prot);
907
+ option(mem);
908
+ }
909
+
910
+ def isCoker = attrib(M, "isCoker");
911
+ if( typeof(isCoker) == "int" )
912
+ {
913
+ if( isCoker > 0 )
914
+ {
915
+ dbprint(PL-1, "We are going to assume that M is given by coker matrix (that is, M is not a submodule presentation!)");
916
+ }
917
+ }
918
+
919
+ int i,j,k,row,col;
920
+
921
+ if( typeof(attrib(M,"isHomog"))!="intvec" )
922
+ {
923
+ if (size(M)==0) { attrib(M,"isHomog",0); }
924
+ else { ERROR("No admissible degree vector assigned"); }
925
+ }
926
+
927
+ dbprint(PL-1, "// weighting(M): ["+ string(attrib(M, "isHomog")) + "]");
928
+
929
+ option(redSB); option(redTail);
930
+
931
+ def R=basering;
932
+
933
+ int n = nvars(R) - 1;
934
+ int ell = l + n;
935
+
936
+
937
+ /////////////////////////////////////////////////////////////////////////////
938
+ // computations
939
+
940
+ int tBegin=timer;
941
+ int reg = CM_regularity(M);
942
+ int tCMEnd = timer;
943
+
944
+ dbprint(PL-1, "// CM_reg(M): "+ string(reg));
945
+
946
+ int bound = max(reg + 1, h - 1);
947
+
948
+ dbprint(PL-1, "// bound: "+ string(bound));
949
+
950
+ ///////////////////////////////////////////////////////////////
951
+ int tSTDBegin=timer;
952
+ M = std(M); // for kbase! // NOTE: this should be after CM_regularity, since otherwise CM_regularity computes JUST TOOOOOOO LONG sometimes (see Reg_Hard examples!)
953
+ int tSTDEnd = timer;
954
+
955
+ dbprint(PL-1, "// M = std(M: "+string(nrows(M)) + " x " + string(ncols(M)) + ")");
956
+ dbprint(PL-2, M);
957
+ dbprint(PL-1, "// weighting(M): ["+ string(attrib(M, "isHomog")) + "]");
958
+
959
+
960
+ printlevel = printlevel + 1;
961
+ int tTruncateBegin=timer;
962
+ module MT = truncateFast(M, bound);
963
+ int tTruncateEnd=timer;
964
+ printlevel = printlevel - 1;
965
+
966
+ dbprint(PL-1, "// MT = truncateFast(M: "+string(nrows(MT)) + " x " + string(ncols(MT)) +", " + string(bound) + ")");
967
+ dbprint(PL-2, MT);
968
+ dbprint(PL-1, "// weighting(MT): ["+ string(attrib(MT, "isHomog")) + "]");
969
+
970
+ int m=nrows(MT);
971
+
972
+ ///////////////////////////////////////////////////////////////
973
+ int tTransposeJacobBegin=timer;
974
+ MT = jacob(MT); // ! :(
975
+ int tTransposeJacobEnd=timer;
976
+
977
+ dbprint(PL-1, "// MT = jacob(MT: "+string(nrows(MT)) + " x " + string(ncols(MT)) + ")");
978
+ dbprint(PL-2, MT);
979
+ dbprint(PL-1, "// weighting(MT): ["+ string(attrib(MT, "isHomog")) + "]");
980
+
981
+ int tSyzBegin=timer;
982
+ MT = syz(MT);
983
+ int tSyzEnd=timer;
984
+
985
+ dbprint(PL-1, "// MT = syz(MT: "+string(nrows(MT)) + " x " + string(ncols(MT)) + ")");
986
+ dbprint(PL-2, MT);
987
+ dbprint(PL-1, "// weighting(MT): ["+ string(attrib(MT, "isHomog")) + "]");
988
+
989
+ int tMatrixOppBegin=timer;
990
+ module SS = TensorModuleMult(m, MT);
991
+ int tMatrixOppEnd=timer;
992
+
993
+ dbprint(PL-1, "// SS = TensorModuleMult("+ string(m)+ ", MT: "+string(nrows(MT)) + " x " + string(ncols(MT)) + ")");
994
+ dbprint(PL-2, SS);
995
+ dbprint(PL-1, "// weighting(SS): ["+ string(attrib(SS, "isHomog")) + "]");
996
+
997
+ //--- to the exterior algebra
998
+ def AR = Exterior(); setring AR;
999
+
1000
+ dbprint(PL-1, "// Test: var(1) * var(1): "+ string(var(1) * var(1)));
1001
+
1002
+ int maxbound = max(1, bound - ell + 1);
1003
+ // int maxbound = max(1, bound - l + 1); // As In M2!!!
1004
+
1005
+ dbprint(PL-1, "// maxbound: "+ string(maxbound));
1006
+
1007
+ //--- here we are with our matrix
1008
+ module EM=imap(R,SS);
1009
+ intvec w;
1010
+ for (i=1; i<=nrows(EM); i++)
1011
+ {
1012
+ w[i]=-bound-1;
1013
+ }
1014
+
1015
+ attrib(EM,"isHomog",w);
1016
+
1017
+ ///////////////////////////////////////////////////////////////
1018
+
1019
+ dbprint(PL-1, "// EM: "+string(nrows(EM)) + " x " + string(ncols(EM)) + ")");
1020
+ dbprint(PL-2, EM);
1021
+ dbprint(PL-1, "// weighting(EM): ["+ string(attrib(EM, "isHomog")) + "]");
1022
+
1023
+ int tResulutionBegin=timer;
1024
+ resolution RE = nres(EM, maxbound); // TODO: Plural computes one too many syzygies...?!
1025
+ int tMinResBegin=timer;
1026
+ RE = minres(RE);
1027
+ int tBettiBegin=timer;
1028
+ intmat Betti = betti(RE); // betti(RE, 1);?
1029
+ int tResulutionEnd=timer;
1030
+
1031
+ int tEnd = tResulutionEnd;
1032
+
1033
+ if( PL > 0 )
1034
+ {
1035
+ // list L = RE; // TODO: size(L/RE) is wrong!
1036
+ "
1037
+ ---- RESULTS ----
1038
+ Tate Resolution:
1039
+ ";
1040
+ RE;
1041
+ "Betti numbers for Tate resolution (diagonal cohomology table):";
1042
+ print(Betti, "betti"); // Diagonal form!
1043
+ }
1044
+
1045
+ // printlevel = printlevel + 1;
1046
+ Betti = showResult(Betti, l, h ); // Show usual form of cohomology table
1047
+ // printlevel = printlevel - 1;
1048
+
1049
+ if(PL > 0)
1050
+ {
1051
+ "
1052
+ ---- TIMINGS -------
1053
+ Trunc Time: ", tTruncateEnd - tTruncateBegin, "
1054
+ Reg Time: ", tCMEnd - tBegin, "
1055
+ kStd Time: ", tSTDEnd - tSTDBegin, "
1056
+ Jacob Time: ", tTransposeJacobEnd - tTransposeJacobBegin, "
1057
+ Syz Time: ", tSyzEnd - tSyzBegin, "
1058
+ Mat Time: ", tMatrixOppEnd - tMatrixOppBegin, "
1059
+ ------------------------------
1060
+ Res Time: ", tResulutionEnd - tResulutionBegin, "
1061
+ :: NRes Time: ", tMinResBegin - tResulutionBegin, "
1062
+ :: MinRes .Time: ", tBettiBegin - tMinResBegin, "
1063
+ :: Betti .Time: ", tResulutionEnd - tBettiBegin, "
1064
+ ---------------------------------------------------------
1065
+ Total Time: ", tEnd - tBegin, "
1066
+ ---------------------------------------------------------
1067
+ ";
1068
+ }
1069
+
1070
+ setring R;
1071
+
1072
+ option(set, save);
1073
+
1074
+ return(Betti);
1075
+ }
1076
+ example
1077
+ {"EXAMPLE:";
1078
+ echo = 2;
1079
+ int pl = printlevel;
1080
+ int l,h, t;
1081
+
1082
+ //-------------------------------------------
1083
+ // cohomology of structure sheaf on P^4:
1084
+ //-------------------------------------------
1085
+ ring r=32001,x(1..5),dp;
1086
+
1087
+ module M= getStructureSheaf(); // OO_P^4
1088
+
1089
+ l = -12; h = 12; // range of twists: l..h
1090
+
1091
+ printlevel = 0;
1092
+ //////////////////////////////////////////////
1093
+ t = timer;
1094
+
1095
+ def A = sheafCoh(M, l, h); // global Ext method:
1096
+ displayCohom(A,l,h,nvars(basering)-1);
1097
+
1098
+ "Time: ", timer - t;
1099
+ //////////////////////////////////////////////
1100
+ t = timer;
1101
+
1102
+ A = sheafCohBGG(M, l, h); // BGG method (without optimization):
1103
+ displayCohom(A,l,h,nvars(basering)-1);
1104
+
1105
+ "Time: ", timer - t;
1106
+ //////////////////////////////////////////////
1107
+ t = timer;
1108
+
1109
+ A = sheafCohBGG2(M, l, h); // BGG method (with optimization)
1110
+ displayCohom(A,l,h,nvars(basering)-1);
1111
+
1112
+ "Time: ", timer - t;
1113
+ //////////////////////////////////////////////
1114
+ printlevel = pl;
1115
+
1116
+ kill A, r;
1117
+
1118
+ //-------------------------------------------
1119
+ // cohomology of cotangential bundle on P^3:
1120
+ //-------------------------------------------
1121
+ ring R=32001,(x,y,z,u),dp;
1122
+
1123
+ module M = getCotangentialBundle();
1124
+
1125
+ l = -12; h = 11; // range of twists: l..h
1126
+
1127
+ //////////////////////////////////////////////
1128
+ printlevel = 0;
1129
+ t = timer;
1130
+
1131
+ def B = sheafCoh(M, l, h); // global Ext method:
1132
+ displayCohom(B,l,h,nvars(basering)-1);
1133
+
1134
+ "Time: ", timer - t;
1135
+ //////////////////////////////////////////////
1136
+ t = timer;
1137
+
1138
+ B = sheafCohBGG(M, l, h); // BGG method (without optimization):
1139
+ displayCohom(B,l,h,nvars(basering)-1);
1140
+
1141
+ "Time: ", timer - t;
1142
+ //////////////////////////////////////////////
1143
+ t = timer;
1144
+
1145
+ B = sheafCohBGG2(M, l, h); // BGG method (with optimization)
1146
+ displayCohom(B,l,h,nvars(basering)-1);
1147
+
1148
+ "Time: ", timer - t;
1149
+ //////////////////////////////////////////////
1150
+ printlevel = pl;
1151
+ }
1152
+
1153
+
1154
+ ///////////////////////////////////////////////////////////////////////////////
1155
+
1156
+ proc dimH(int i,module M,int d)
1157
+ "USAGE: dimH(i,M,d); M module, i,d int
1158
+ ASSUME: @code{M} is graded, and it comes assigned with an admissible degree
1159
+ vector as an attribute, @code{h>=l}, and the basering @code{S} has
1160
+ @code{n+1} variables.
1161
+ RETURN: int, vector space dimension of @math{H^i(F(d))} for F the coherent
1162
+ sheaf on P^n associated to coker(M).
1163
+ NOTE: The procedure is based on local duality as described in [Eisenbud:
1164
+ Computing cohomology. In Vasconcelos: Computational methods in
1165
+ commutative algebra and algebraic geometry. Springer (1998)].
1166
+ SEE ALSO: sheafCoh, sheafCohBGG
1167
+ EXAMPLE: example dimH; shows an example
1168
+ "
1169
+ {
1170
+ if( typeof(attrib(M,"isHomog"))=="string" )
1171
+ {
1172
+ if (size(M)==0)
1173
+ {
1174
+ // assign weights 0 to generators of R^n (n=nrows(M))
1175
+ intvec v;
1176
+ v[nrows(M)]=0;
1177
+ attrib(M,"isHomog",v);
1178
+ }
1179
+ else
1180
+ {
1181
+ ERROR("No admissible degree vector assigned");
1182
+ }
1183
+ }
1184
+ int Result;
1185
+ int n=nvars(basering)-1;
1186
+ if ((i>0) and (i<=n))
1187
+ {
1188
+ list L=Ext_R(n-i,M,1)[2];
1189
+ def N=L[1];
1190
+ return(dimGradedPart(N,-n-1-d));
1191
+ }
1192
+ else
1193
+ {
1194
+ if (i==0)
1195
+ {
1196
+ list L=Ext_R(intvec(n+1,n+2),M,1)[2];
1197
+ def N0=L[2];
1198
+ def N1=L[1];
1199
+ Result=dimGradedPart(M,d) - dimGradedPart(N0,-n-1-d)
1200
+ - dimGradedPart(N1,-n-1-d);
1201
+ return(Result);
1202
+ }
1203
+ else
1204
+ {
1205
+ return(0);
1206
+ }
1207
+ }
1208
+ }
1209
+ example
1210
+ {"EXAMPLE:";
1211
+ echo = 2;
1212
+ ring R=0,(x,y,z,u),dp;
1213
+ resolution T1=mres(maxideal(1),0);
1214
+ module M=T1[3];
1215
+ intvec v=2,2,2,2,2,2;
1216
+ attrib(M,"isHomog",v);
1217
+ dimH(0,M,2);
1218
+ dimH(1,M,0);
1219
+ dimH(2,M,1);
1220
+ dimH(3,M,-5);
1221
+ }
1222
+
1223
+
1224
+ ///////////////////////////////////////////////////////////////////////////////
1225
+
1226
+ proc sheafCoh(module M,int l,int h,list #)
1227
+ "USAGE: sheafCoh(M,l,h); M module, l,h int
1228
+ ASSUME: @code{M} is graded, and it comes assigned with an admissible degree
1229
+ vector as an attribute, @code{h>=l}. The basering @code{S} has
1230
+ @code{n+1} variables.
1231
+ RETURN: intmat, cohomology of twists of the coherent sheaf F on P^n
1232
+ associated to coker(M). The range of twists is determined by @code{l},
1233
+ @code{h}.
1234
+ DISPLAY: The intmat can be displayed in a diagram of the following form:
1235
+ with @code{displayCohom(A,l,h,nvars(r)-1);}@*
1236
+ @format
1237
+ l l+1 h
1238
+ ----------------------------------------------------------
1239
+ n: h^n(F(l)) h^n(F(l+1)) ...... h^n(F(h))
1240
+ ...............................................
1241
+ 1: h^1(F(l)) h^1(F(l+1)) ...... h^1(F(h))
1242
+ 0: h^0(F(l)) h^0(F(l+1)) ...... h^0(F(h))
1243
+ ----------------------------------------------------------
1244
+ chi: chi(F(l)) chi(F(l+1)) ...... chi(F(h))
1245
+ @end format
1246
+ A @code{'-'} in the diagram refers to a zero entry.
1247
+ NOTE: The procedure is based on local duality as described in [Eisenbud:
1248
+ Computing cohomology. In Vasconcelos: Computational methods in
1249
+ commutative algebra and algebraic geometry. Springer (1998)].@*
1250
+ By default, the procedure uses @code{mres} to compute the Ext
1251
+ modules. If called with the additional parameter @code{\"sres\"},
1252
+ the @code{sres} command is used instead.
1253
+ SEE ALSO: dimH, sheafCohBGG, sheafCoh_w
1254
+ EXAMPLE: example sheafCoh; shows an example
1255
+ "
1256
+ {
1257
+ int use_sres;
1258
+ if( typeof(attrib(M,"isHomog"))!="intvec" )
1259
+ {
1260
+ if (size(M)==0) { attrib(M,"isHomog",0); }
1261
+ else { ERROR("No admissible degree vector assigned"); }
1262
+ }
1263
+ if (size(#)>0)
1264
+ {
1265
+ if (#[1]=="sres") { use_sres=1; }
1266
+ }
1267
+ int i,j;
1268
+ module N,N0,N1;
1269
+ int n=nvars(basering)-1;
1270
+ intvec v=0..n+1;
1271
+ int col=h-l+1;
1272
+ intmat newBetti[n+1][col];
1273
+ if (use_sres) { list L=Ext_R(v,M,1,"sres")[2]; }
1274
+ else { list L=Ext_R(v,M,1)[2]; }
1275
+ for (i=l; i<=h; i++)
1276
+ {
1277
+ N0=L[n+2];
1278
+ N1=L[n+1];
1279
+ newBetti[n+1,i-l+1]=dimGradedPart(M,i) - dimGradedPart(N0,-n-1-i)
1280
+ - dimGradedPart(N0,-n-1-i);
1281
+ }
1282
+ for (j=1; j<=n; j++)
1283
+ {
1284
+ N=L[j];
1285
+ attrib(N,"isSB",1);
1286
+ if (dim(N)>=0)
1287
+ {
1288
+ for (i=l; i<=h; i++)
1289
+ {
1290
+ newBetti[j,i-l+1]=dimGradedPart(N,-n-1-i);
1291
+ }
1292
+ }
1293
+ }
1294
+ return(newBetti);
1295
+ }
1296
+ example
1297
+ {"EXAMPLE:";
1298
+ echo = 2;
1299
+ //
1300
+ // cohomology of structure sheaf on P^4:
1301
+ //-------------------------------------------
1302
+ ring r=0,x(1..5),dp;
1303
+ module M=0;
1304
+ intmat A=sheafCoh(0,-7,2);
1305
+ A;
1306
+ displayCohom(A,-7,2,nvars(r)-1);
1307
+ //
1308
+ // cohomology of cotangential bundle on P^3:
1309
+ //-------------------------------------------
1310
+ ring R=0,(x,y,z,u),dp;
1311
+ resolution T1=mres(maxideal(1),0);
1312
+ module M=T1[3];
1313
+ intvec v=2,2,2,2,2,2;
1314
+ attrib(M,"isHomog",v);
1315
+ intmat B=sheafCoh(M,-6,2);
1316
+ displayCohom(B,-6,2,nvars(R)-1);
1317
+ }
1318
+
1319
+ proc sheafCoh_w(module M,int l,int h,intvec w, list #)
1320
+ "USAGE: sheafCoh(M,l,h); M module, l,h int, w intvec
1321
+ ASSUME: @code{M} is graded by w, @code{h>=l}. The basering @code{S} has
1322
+ @code{n+1} variables.
1323
+ RETURN: intmat, cohomology of twists of the coherent sheaf F on P^n
1324
+ associated to coker(M). The range of twists is determined by @code{l},
1325
+ @code{h}.
1326
+ DISPLAY: The intmat can be displayed in a diagram of the following form:
1327
+ with @code{displayCohom(A,l,h,nvars(r)-1);}@*
1328
+ @format
1329
+ l l+1 h
1330
+ ----------------------------------------------------------
1331
+ n: h^n(F(l)) h^n(F(l+1)) ...... h^n(F(h))
1332
+ ...............................................
1333
+ 1: h^1(F(l)) h^1(F(l+1)) ...... h^1(F(h))
1334
+ 0: h^0(F(l)) h^0(F(l+1)) ...... h^0(F(h))
1335
+ ----------------------------------------------------------
1336
+ chi: chi(F(l)) chi(F(l+1)) ...... chi(F(h))
1337
+ @end format
1338
+ A @code{'-'} in the diagram refers to a zero entry.
1339
+ NOTE: The procedure is based on local duality as described in [Eisenbud:
1340
+ Computing cohomology. In Vasconcelos: Computational methods in
1341
+ commutative algebra and algebraic geometry. Springer (1998)].@*
1342
+ By default, the procedure uses @code{mres} to compute the Ext
1343
+ modules. If called with the additional parameter @code{\"sres\"},
1344
+ the @code{sres} command is used instead.
1345
+ SEE ALSO: dimH, sheafCohBGG, sheafCoh
1346
+ EXAMPLE: example sheafCoh; shows an example
1347
+ "
1348
+ {
1349
+ attrib(M,"isHomog",w);
1350
+ return(sheafCoh(M,l,h,#));
1351
+ }
1352
+ example
1353
+ {"EXAMPLE:";
1354
+ echo = 2;
1355
+ //
1356
+ // cohomology of structure sheaf on P^4:
1357
+ //-------------------------------------------
1358
+ ring r=0,x(1..5),dp;
1359
+ module M=0;
1360
+ intmat A=sheafCoh_w(0,-7,2,intvec(0));
1361
+ A;
1362
+ displayCohom(A,-7,2,nvars(r)-1);
1363
+ //
1364
+ // cohomology of cotangential bundle on P^3:
1365
+ //-------------------------------------------
1366
+ ring R=0,(x,y,z,u),dp;
1367
+ resolution T1=mres(maxideal(1),0);
1368
+ module M=T1[3];
1369
+ intvec v=2,2,2,2,2,2;
1370
+ intmat B=sheafCoh_w(M,-6,2,v);
1371
+ displayCohom(B,-6,2,nvars(R)-1);
1372
+ }
1373
+
1374
+ ///////////////////////////////////////////////////////////////////////////////
1375
+ proc displayCohom (intmat data, int l, int h, int n)
1376
+ "USAGE: displayCohom(data,l,h,n); data intmat, l,h,n int
1377
+ ASSUME: @code{h>=l}, @code{data} is the return value of
1378
+ @code{sheafCoh(M,l,h)} or of @code{sheafCohBGG(M,l,h)}, and the
1379
+ basering has @code{n+1} variables.
1380
+ RETURN: none
1381
+ NOTE: The intmat is displayed in a diagram of the following form: @*
1382
+ @format
1383
+ l l+1 h
1384
+ ----------------------------------------------------------
1385
+ n: h^n(F(l)) h^n(F(l+1)) ...... h^n(F(h))
1386
+ ...............................................
1387
+ 1: h^1(F(l)) h^1(F(l+1)) ...... h^1(F(h))
1388
+ 0: h^0(F(l)) h^0(F(l+1)) ...... h^0(F(h))
1389
+ ----------------------------------------------------------
1390
+ chi: chi(F(l)) chi(F(l+1)) ...... chi(F(h))
1391
+ @end format
1392
+ where @code{F} refers to the associated sheaf of @code{M} on P^n.@*
1393
+ A @code{'-'} in the diagram refers to a zero entry, a @code{'*'}
1394
+ refers to a negative entry (= dimension not yet determined).
1395
+ "
1396
+ {
1397
+ int i,j,k,dat,maxL;
1398
+ intvec notSumCol;
1399
+ notSumCol[h-l+1]=0;
1400
+ string s;
1401
+ maxL=4;
1402
+ for (i=1;i<=nrows(data);i++)
1403
+ {
1404
+ for (j=1;j<=ncols(data);j++)
1405
+ {
1406
+ if (size(string(data[i,j]))>=maxL-1)
1407
+ {
1408
+ maxL=size(string(data[i,j]))+2;
1409
+ }
1410
+ }
1411
+ }
1412
+ string Row=" ";
1413
+ string Row1="----";
1414
+ for (i=l; i<=h; i++)
1415
+ {
1416
+ for (j=1; j<=maxL-size(string(i)); j++)
1417
+ {
1418
+ Row=Row+" ";
1419
+ }
1420
+ Row=Row+string(i);
1421
+ for (j=1; j<=maxL; j++) { Row1 = Row1+"-"; }
1422
+ }
1423
+ print(Row);
1424
+ print(Row1);
1425
+ for (j=1; j<=n+1; j++)
1426
+ {
1427
+ s = string(n+1-j);
1428
+ Row = "";
1429
+ for(k=1; k<4-size(s); k++) { Row = Row+" "; }
1430
+ Row = Row + s+":";
1431
+ for (i=0; i<=h-l; i++)
1432
+ {
1433
+ dat = data[j,i+1];
1434
+ if (dat>0) { s = string(dat); }
1435
+ else
1436
+ {
1437
+ if (dat==0) { s="-"; }
1438
+ else { s="*"; notSumCol[i+1]=1; }
1439
+ }
1440
+ for(k=1; k<=maxL-size(s); k++) { Row = Row+" "; }
1441
+ Row = Row + s;
1442
+ }
1443
+ print(Row);
1444
+ }
1445
+ print(Row1);
1446
+ Row="chi:";
1447
+ for (i=0; i<=h-l; i++)
1448
+ {
1449
+ dat = 0;
1450
+ if (notSumCol[i+1]==0)
1451
+ {
1452
+ for (j=0; j<=n; j++) { dat = dat + (-1)^j * data[n+1-j,i+1]; }
1453
+ s = string(dat);
1454
+ }
1455
+ else { s="*"; }
1456
+ for (k=1; k<=maxL-size(s); k++) { Row = Row+" "; }
1457
+ Row = Row + s;
1458
+ }
1459
+ print(Row);
1460
+ }
1461
+ ///////////////////////////////////////////////////////////////////////////////
1462
+
1463
+ proc getStructureSheaf(list #)
1464
+ {
1465
+
1466
+ if( size(#) == 0 )
1467
+ {
1468
+ module M = 0;
1469
+ intvec v = 0;
1470
+ attrib(M,"isHomog",v);
1471
+ // homog(M);
1472
+
1473
+ attrib(M, "isCoker", 1);
1474
+
1475
+ // attrib(M);
1476
+ return(M);
1477
+ }
1478
+
1479
+ if( typeof(#[1]) == "ideal")
1480
+ {
1481
+ ideal I = #[1];
1482
+
1483
+ if( size(#) == 2 )
1484
+ {
1485
+ if( typeof(#[2]) == "int" )
1486
+ {
1487
+ if( #[2] != 0 )
1488
+ {
1489
+ qring @@@@QQ = std(I);
1490
+
1491
+ module M = getStructureSheaf();
1492
+
1493
+ export M;
1494
+
1495
+ // keepring @@@@QQ; // This is a bad idea... :(?
1496
+ return (@@@@QQ);
1497
+ }
1498
+ }
1499
+ }
1500
+
1501
+ /*
1502
+ // This seems to be wrong!!!
1503
+ module M = I * gen(1);
1504
+ homog(M);
1505
+
1506
+ M = modulo(gen(1), module(I * gen(1))); // basering^1 / I
1507
+
1508
+ homog(M);
1509
+
1510
+ attrib(M, "isCoker", 1);
1511
+
1512
+ attrib(M);
1513
+ return(M);
1514
+ */
1515
+ }
1516
+
1517
+ ERROR("Wrong argument");
1518
+
1519
+ }
1520
+ example
1521
+ {"EXAMPLE:";
1522
+ echo = 2; int pl = printlevel;
1523
+ printlevel = voice;
1524
+
1525
+
1526
+ //////////////////////////////////////////////////////////////////////////////
1527
+ ring r;
1528
+ module M = getStructureSheaf();
1529
+ "Basering: ";
1530
+ basering;
1531
+ "Module: ", string(M), ", grading is given by weights: ", attrib(M, "isHomog");
1532
+
1533
+ def A=sheafCohBGG2(M,-9,9);
1534
+ print(A);
1535
+
1536
+ //////////////////////////////////////////////////////////////////////////////
1537
+ setring r;
1538
+ module M = getStructureSheaf(ideal(var(1)), 0);
1539
+
1540
+ "Basering: ";
1541
+ basering;
1542
+ "Module: ", string(M), ", grading is given by weights: ", attrib(M, "isHomog");
1543
+
1544
+ def A=sheafCohBGG2(M,-9,9);
1545
+ print(A);
1546
+
1547
+ //////////////////////////////////////////////////////////////////////////////
1548
+ setring r;
1549
+ def Q = getStructureSheaf(ideal(var(1)), 1); // returns a new ring!
1550
+ setring Q; // M was exported in the new ring!
1551
+
1552
+ "Basering: ";
1553
+ basering;
1554
+ "Module: ", string(M), ", grading is given by weights: ", attrib(M, "isHomog");
1555
+
1556
+ def A=sheafCohBGG2(M,-9,9);
1557
+ print(A);
1558
+
1559
+ printlevel = pl;
1560
+ }
1561
+
1562
+
1563
+ proc getCotangentialBundle()
1564
+ {
1565
+ resolution T1=mres(maxideal(1),3);
1566
+ module M=T1[3];
1567
+ // attrib(M,"isHomog");
1568
+ // homog(M);
1569
+ attrib(M, "isCoker", 1);
1570
+ // attrib(M);
1571
+ return (M);
1572
+ }
1573
+
1574
+ proc getIdealSheafPullback(ideal I, ideal pi)
1575
+ {
1576
+ def save = basering;
1577
+ map P = save, pi;
1578
+ return( P(I) );
1579
+ }
1580
+
1581
+ // TODO: set attributes!
1582
+
1583
+
1584
+ proc getIdealSheaf(ideal I)
1585
+ {
1586
+ int i = homog(I);
1587
+ resolution FI = mres(I,2); // Syz + grading...
1588
+ module M = FI[2];
1589
+ attrib(M, "isCoker", 1);
1590
+ // attrib(M);
1591
+ return(M);
1592
+ }
1593
+
1594
+
1595
+ /*
1596
+ Examples:
1597
+ ---------
1598
+ LIB "sheafcoh.lib";
1599
+
1600
+ ring S = 32003, x(0..4), dp;
1601
+ module MI=maxideal(1);
1602
+ attrib(MI,"isHomog",intvec(-1));
1603
+ resolution kos = nres(MI,0);
1604
+ print(betti(kos),"betti");
1605
+ LIB "random.lib";
1606
+ matrix alpha0 = random(32002,10,3);
1607
+ module pres = module(alpha0)+kos[3];
1608
+ attrib(pres,"isHomog",intvec(1,1,1,1,1,1,1,1,1,1));
1609
+ resolution fcokernel = mres(pres,0);
1610
+ print(betti(fcokernel),"betti");
1611
+ module dir = transpose(pres);
1612
+ attrib(dir,"isHomog",intvec(-1,-1,-1,-2,-2,-2,
1613
+ -2,-2,-2,-2,-2,-2,-2));
1614
+ resolution fdir = mres(dir,2);
1615
+ print(betti(fdir),"betti");
1616
+ ideal I = groebner(flatten(fdir[2]));
1617
+ resolution FI = mres(I,0);
1618
+ print(betti(FI),"betti");
1619
+ module F=FI[2];
1620
+ int t=timer;
1621
+ def A1=sheafCoh(F,-8,8);
1622
+ timer-t;
1623
+ t=timer;
1624
+ def A2=sheafCohBGG(F,-8,8);
1625
+ timer-t;
1626
+
1627
+ LIB "sheafcoh.lib";
1628
+ LIB "random.lib";
1629
+ ring S = 32003, x(0..4), dp;
1630
+ resolution kos = nres(maxideal(1),0);
1631
+ betti(kos);
1632
+ matrix kos5 = kos[5];
1633
+ matrix tphi = transpose(dsum(kos5,kos5));
1634
+ matrix kos3 = kos[3];
1635
+ matrix psi = dsum(kos3,kos3);
1636
+ matrix beta1 = random(32002,20,2);
1637
+ matrix tbeta1tilde = transpose(psi*beta1);
1638
+ matrix tbeta0 = lift(tphi,tbeta1tilde);
1639
+ matrix kos4 = kos[4];
1640
+ matrix tkos4pluskos4 = transpose(dsum(kos4,kos4));
1641
+ matrix tgammamin1 = random(32002,20,1);
1642
+ matrix tgamma0 = tkos4pluskos4*tgammamin1;
1643
+ matrix talpha0 = concat(tbeta0,tgamma0);
1644
+ matrix zero[20][1];
1645
+ matrix tpsi = transpose(psi);
1646
+ matrix tpresg = concat(tpsi,zero);
1647
+ matrix pres = module(transpose(talpha0))
1648
+ + module(transpose(tpresg));
1649
+ module dir = transpose(pres);
1650
+ dir = prune(dir);
1651
+ homog(dir);
1652
+ intvec deg_dir = attrib(dir,"isHomog");
1653
+ attrib(dir,"isHomog",deg_dir-2); // set degrees
1654
+ resolution fdir = mres(prune(dir),2);
1655
+ print(betti(fdir),"betti");
1656
+ ideal I = groebner(flatten(fdir[2]));
1657
+ resolution FI = mres(I,0);
1658
+
1659
+ module F=FI[2];
1660
+ def A1=sheafCoh(F,-5,7);
1661
+ def A2=sheafCohBGG(F,-5,7);
1662
+
1663
+ */