passagemath-singular 10.6.31rc3__cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

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

Potentially problematic release.


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

Files changed (490) hide show
  1. PySingular.cpython-314-aarch64-linux-gnu.so +0 -0
  2. passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
  3. passagemath_singular-10.6.31rc3.dist-info/RECORD +490 -0
  4. passagemath_singular-10.6.31rc3.dist-info/WHEEL +6 -0
  5. passagemath_singular-10.6.31rc3.dist-info/top_level.txt +3 -0
  6. passagemath_singular.libs/libSingular-4-6a2a8666.4.1.so +0 -0
  7. passagemath_singular.libs/libcddgmp-ac579979.so.0.1.3 +0 -0
  8. passagemath_singular.libs/libfactory-4-66e33516.4.1.so +0 -0
  9. passagemath_singular.libs/libflint-81de1160.so.21.0.0 +0 -0
  10. passagemath_singular.libs/libgf2x-fbd36f80.so.3.0.0 +0 -0
  11. passagemath_singular.libs/libgfortran-e1b7dfc8.so.5.0.0 +0 -0
  12. passagemath_singular.libs/libgmp-93ebf16a.so.10.5.0 +0 -0
  13. passagemath_singular.libs/libgsl-e3525837.so.28.0.0 +0 -0
  14. passagemath_singular.libs/libmpfr-e0f11cf3.so.6.2.1 +0 -0
  15. passagemath_singular.libs/libntl-0043a3a2.so.44.0.1 +0 -0
  16. passagemath_singular.libs/libomalloc-0-06512335.9.6.so +0 -0
  17. passagemath_singular.libs/libopenblasp-r0-4c5b64b1.3.29.so +0 -0
  18. passagemath_singular.libs/libpolys-4-cb7246b5.4.1.so +0 -0
  19. passagemath_singular.libs/libreadline-28330744.so.8.2 +0 -0
  20. passagemath_singular.libs/libsingular_resources-4-8c425241.4.1.so +0 -0
  21. passagemath_singular.libs/libtinfo-f81c2d16.so.6.3 +0 -0
  22. sage/algebras/all__sagemath_singular.py +3 -0
  23. sage/algebras/fusion_rings/all.py +19 -0
  24. sage/algebras/fusion_rings/f_matrix.py +2448 -0
  25. sage/algebras/fusion_rings/fast_parallel_fmats_methods.cpython-314-aarch64-linux-gnu.so +0 -0
  26. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd +5 -0
  27. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx +538 -0
  28. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.cpython-314-aarch64-linux-gnu.so +0 -0
  29. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd +3 -0
  30. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx +331 -0
  31. sage/algebras/fusion_rings/fusion_double.py +899 -0
  32. sage/algebras/fusion_rings/fusion_ring.py +1580 -0
  33. sage/algebras/fusion_rings/poly_tup_engine.cpython-314-aarch64-linux-gnu.so +0 -0
  34. sage/algebras/fusion_rings/poly_tup_engine.pxd +24 -0
  35. sage/algebras/fusion_rings/poly_tup_engine.pyx +579 -0
  36. sage/algebras/fusion_rings/shm_managers.cpython-314-aarch64-linux-gnu.so +0 -0
  37. sage/algebras/fusion_rings/shm_managers.pxd +24 -0
  38. sage/algebras/fusion_rings/shm_managers.pyx +780 -0
  39. sage/algebras/letterplace/all.py +1 -0
  40. sage/algebras/letterplace/free_algebra_element_letterplace.cpython-314-aarch64-linux-gnu.so +0 -0
  41. sage/algebras/letterplace/free_algebra_element_letterplace.pxd +18 -0
  42. sage/algebras/letterplace/free_algebra_element_letterplace.pyx +755 -0
  43. sage/algebras/letterplace/free_algebra_letterplace.cpython-314-aarch64-linux-gnu.so +0 -0
  44. sage/algebras/letterplace/free_algebra_letterplace.pxd +35 -0
  45. sage/algebras/letterplace/free_algebra_letterplace.pyx +914 -0
  46. sage/algebras/letterplace/letterplace_ideal.cpython-314-aarch64-linux-gnu.so +0 -0
  47. sage/algebras/letterplace/letterplace_ideal.pyx +408 -0
  48. sage/algebras/quatalg/all.py +2 -0
  49. sage/algebras/quatalg/quaternion_algebra.py +4778 -0
  50. sage/algebras/quatalg/quaternion_algebra_cython.cpython-314-aarch64-linux-gnu.so +0 -0
  51. sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
  52. sage/algebras/quatalg/quaternion_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  53. sage/algebras/quatalg/quaternion_algebra_element.pxd +29 -0
  54. sage/algebras/quatalg/quaternion_algebra_element.pyx +2176 -0
  55. sage/all__sagemath_singular.py +11 -0
  56. sage/ext_data/all__sagemath_singular.py +1 -0
  57. sage/ext_data/singular/function_field/core.lib +98 -0
  58. sage/interfaces/all__sagemath_singular.py +1 -0
  59. sage/interfaces/singular.py +2835 -0
  60. sage/libs/all__sagemath_singular.py +1 -0
  61. sage/libs/singular/__init__.py +1 -0
  62. sage/libs/singular/decl.pxd +1168 -0
  63. sage/libs/singular/function.cpython-314-aarch64-linux-gnu.so +0 -0
  64. sage/libs/singular/function.pxd +87 -0
  65. sage/libs/singular/function.pyx +1901 -0
  66. sage/libs/singular/function_factory.py +61 -0
  67. sage/libs/singular/groebner_strategy.cpython-314-aarch64-linux-gnu.so +0 -0
  68. sage/libs/singular/groebner_strategy.pxd +22 -0
  69. sage/libs/singular/groebner_strategy.pyx +582 -0
  70. sage/libs/singular/option.cpython-314-aarch64-linux-gnu.so +0 -0
  71. sage/libs/singular/option.pyx +671 -0
  72. sage/libs/singular/polynomial.cpython-314-aarch64-linux-gnu.so +0 -0
  73. sage/libs/singular/polynomial.pxd +39 -0
  74. sage/libs/singular/polynomial.pyx +661 -0
  75. sage/libs/singular/ring.cpython-314-aarch64-linux-gnu.so +0 -0
  76. sage/libs/singular/ring.pxd +58 -0
  77. sage/libs/singular/ring.pyx +893 -0
  78. sage/libs/singular/singular.cpython-314-aarch64-linux-gnu.so +0 -0
  79. sage/libs/singular/singular.pxd +72 -0
  80. sage/libs/singular/singular.pyx +1944 -0
  81. sage/libs/singular/standard_options.py +145 -0
  82. sage/matrix/all__sagemath_singular.py +1 -0
  83. sage/matrix/matrix_mpolynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  84. sage/matrix/matrix_mpolynomial_dense.pxd +7 -0
  85. sage/matrix/matrix_mpolynomial_dense.pyx +615 -0
  86. sage/rings/all__sagemath_singular.py +1 -0
  87. sage/rings/function_field/all__sagemath_singular.py +1 -0
  88. sage/rings/function_field/derivations_polymod.py +911 -0
  89. sage/rings/function_field/element_polymod.cpython-314-aarch64-linux-gnu.so +0 -0
  90. sage/rings/function_field/element_polymod.pyx +406 -0
  91. sage/rings/function_field/function_field_polymod.py +2611 -0
  92. sage/rings/function_field/ideal_polymod.py +1775 -0
  93. sage/rings/function_field/order_polymod.py +1475 -0
  94. sage/rings/function_field/place_polymod.py +681 -0
  95. sage/rings/polynomial/all__sagemath_singular.py +1 -0
  96. sage/rings/polynomial/multi_polynomial_ideal_libsingular.cpython-314-aarch64-linux-gnu.so +0 -0
  97. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd +5 -0
  98. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx +339 -0
  99. sage/rings/polynomial/multi_polynomial_libsingular.cpython-314-aarch64-linux-gnu.so +0 -0
  100. sage/rings/polynomial/multi_polynomial_libsingular.pxd +30 -0
  101. sage/rings/polynomial/multi_polynomial_libsingular.pyx +6277 -0
  102. sage/rings/polynomial/plural.cpython-314-aarch64-linux-gnu.so +0 -0
  103. sage/rings/polynomial/plural.pxd +48 -0
  104. sage/rings/polynomial/plural.pyx +3171 -0
  105. sage/symbolic/all__sagemath_singular.py +1 -0
  106. sage/symbolic/comparison_impl.pxi +428 -0
  107. sage/symbolic/constants_c_impl.pxi +178 -0
  108. sage/symbolic/expression.cpython-314-aarch64-linux-gnu.so +0 -0
  109. sage/symbolic/expression.pxd +7 -0
  110. sage/symbolic/expression.pyx +14200 -0
  111. sage/symbolic/getitem_impl.pxi +202 -0
  112. sage/symbolic/pynac.pxi +572 -0
  113. sage/symbolic/pynac_constant_impl.pxi +133 -0
  114. sage/symbolic/pynac_function_impl.pxi +206 -0
  115. sage/symbolic/pynac_impl.pxi +2576 -0
  116. sage/symbolic/pynac_wrap.h +124 -0
  117. sage/symbolic/series_impl.pxi +272 -0
  118. sage/symbolic/substitution_map_impl.pxi +94 -0
  119. sage_wheels/bin/ESingular +0 -0
  120. sage_wheels/bin/Singular +0 -0
  121. sage_wheels/bin/TSingular +0 -0
  122. sage_wheels/lib/singular/MOD/cohomo.la +41 -0
  123. sage_wheels/lib/singular/MOD/cohomo.so +0 -0
  124. sage_wheels/lib/singular/MOD/customstd.la +41 -0
  125. sage_wheels/lib/singular/MOD/customstd.so +0 -0
  126. sage_wheels/lib/singular/MOD/freealgebra.la +41 -0
  127. sage_wheels/lib/singular/MOD/freealgebra.so +0 -0
  128. sage_wheels/lib/singular/MOD/gfanlib.la +41 -0
  129. sage_wheels/lib/singular/MOD/gfanlib.so +0 -0
  130. sage_wheels/lib/singular/MOD/gitfan.la +41 -0
  131. sage_wheels/lib/singular/MOD/gitfan.so +0 -0
  132. sage_wheels/lib/singular/MOD/interval.la +41 -0
  133. sage_wheels/lib/singular/MOD/interval.so +0 -0
  134. sage_wheels/lib/singular/MOD/loctriv.la +41 -0
  135. sage_wheels/lib/singular/MOD/loctriv.so +0 -0
  136. sage_wheels/lib/singular/MOD/machinelearning.la +41 -0
  137. sage_wheels/lib/singular/MOD/machinelearning.so +0 -0
  138. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.la +41 -0
  139. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.so +0 -0
  140. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.la +41 -0
  141. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.so +0 -0
  142. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.la +41 -0
  143. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.so +0 -0
  144. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.la +41 -0
  145. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.so +0 -0
  146. sage_wheels/lib/singular/MOD/partialgb.la +41 -0
  147. sage_wheels/lib/singular/MOD/partialgb.so +0 -0
  148. sage_wheels/lib/singular/MOD/pyobject.la +41 -0
  149. sage_wheels/lib/singular/MOD/pyobject.so +0 -0
  150. sage_wheels/lib/singular/MOD/singmathic.la +41 -0
  151. sage_wheels/lib/singular/MOD/singmathic.so +0 -0
  152. sage_wheels/lib/singular/MOD/sispasm.la +41 -0
  153. sage_wheels/lib/singular/MOD/sispasm.so +0 -0
  154. sage_wheels/lib/singular/MOD/subsets.la +41 -0
  155. sage_wheels/lib/singular/MOD/subsets.so +0 -0
  156. sage_wheels/lib/singular/MOD/systhreads.la +41 -0
  157. sage_wheels/lib/singular/MOD/systhreads.so +0 -0
  158. sage_wheels/lib/singular/MOD/syzextra.la +41 -0
  159. sage_wheels/lib/singular/MOD/syzextra.so +0 -0
  160. sage_wheels/libexec/singular/MOD/change_cost +0 -0
  161. sage_wheels/libexec/singular/MOD/singularsurf +11 -0
  162. sage_wheels/libexec/singular/MOD/singularsurf_jupyter +9 -0
  163. sage_wheels/libexec/singular/MOD/singularsurf_win +10 -0
  164. sage_wheels/libexec/singular/MOD/solve_IP +0 -0
  165. sage_wheels/libexec/singular/MOD/surfex +16 -0
  166. sage_wheels/libexec/singular/MOD/toric_ideal +0 -0
  167. sage_wheels/share/factory/gftables/10201 +342 -0
  168. sage_wheels/share/factory/gftables/1024 +37 -0
  169. sage_wheels/share/factory/gftables/10609 +356 -0
  170. sage_wheels/share/factory/gftables/11449 +384 -0
  171. sage_wheels/share/factory/gftables/11881 +398 -0
  172. sage_wheels/share/factory/gftables/121 +6 -0
  173. sage_wheels/share/factory/gftables/12167 +408 -0
  174. sage_wheels/share/factory/gftables/125 +7 -0
  175. sage_wheels/share/factory/gftables/12769 +428 -0
  176. sage_wheels/share/factory/gftables/128 +7 -0
  177. sage_wheels/share/factory/gftables/1331 +47 -0
  178. sage_wheels/share/factory/gftables/1369 +48 -0
  179. sage_wheels/share/factory/gftables/14641 +490 -0
  180. sage_wheels/share/factory/gftables/15625 +523 -0
  181. sage_wheels/share/factory/gftables/16 +3 -0
  182. sage_wheels/share/factory/gftables/16129 +540 -0
  183. sage_wheels/share/factory/gftables/16384 +549 -0
  184. sage_wheels/share/factory/gftables/16807 +563 -0
  185. sage_wheels/share/factory/gftables/1681 +58 -0
  186. sage_wheels/share/factory/gftables/169 +8 -0
  187. sage_wheels/share/factory/gftables/17161 +574 -0
  188. sage_wheels/share/factory/gftables/1849 +64 -0
  189. sage_wheels/share/factory/gftables/18769 +628 -0
  190. sage_wheels/share/factory/gftables/19321 +646 -0
  191. sage_wheels/share/factory/gftables/19683 +659 -0
  192. sage_wheels/share/factory/gftables/2048 +71 -0
  193. sage_wheels/share/factory/gftables/2187 +75 -0
  194. sage_wheels/share/factory/gftables/2197 +76 -0
  195. sage_wheels/share/factory/gftables/2209 +76 -0
  196. sage_wheels/share/factory/gftables/22201 +742 -0
  197. sage_wheels/share/factory/gftables/22801 +762 -0
  198. sage_wheels/share/factory/gftables/2401 +82 -0
  199. sage_wheels/share/factory/gftables/243 +11 -0
  200. sage_wheels/share/factory/gftables/24389 +815 -0
  201. sage_wheels/share/factory/gftables/24649 +824 -0
  202. sage_wheels/share/factory/gftables/25 +3 -0
  203. sage_wheels/share/factory/gftables/256 +11 -0
  204. sage_wheels/share/factory/gftables/26569 +888 -0
  205. sage_wheels/share/factory/gftables/27 +3 -0
  206. sage_wheels/share/factory/gftables/27889 +932 -0
  207. sage_wheels/share/factory/gftables/2809 +96 -0
  208. sage_wheels/share/factory/gftables/28561 +954 -0
  209. sage_wheels/share/factory/gftables/289 +12 -0
  210. sage_wheels/share/factory/gftables/29791 +995 -0
  211. sage_wheels/share/factory/gftables/29929 +1000 -0
  212. sage_wheels/share/factory/gftables/3125 +107 -0
  213. sage_wheels/share/factory/gftables/32 +4 -0
  214. sage_wheels/share/factory/gftables/32041 +1070 -0
  215. sage_wheels/share/factory/gftables/32761 +1094 -0
  216. sage_wheels/share/factory/gftables/32768 +1095 -0
  217. sage_wheels/share/factory/gftables/343 +14 -0
  218. sage_wheels/share/factory/gftables/3481 +118 -0
  219. sage_wheels/share/factory/gftables/361 +14 -0
  220. sage_wheels/share/factory/gftables/36481 +1218 -0
  221. sage_wheels/share/factory/gftables/3721 +126 -0
  222. sage_wheels/share/factory/gftables/37249 +1244 -0
  223. sage_wheels/share/factory/gftables/38809 +1296 -0
  224. sage_wheels/share/factory/gftables/39601 +1322 -0
  225. sage_wheels/share/factory/gftables/4 +3 -0
  226. sage_wheels/share/factory/gftables/4096 +139 -0
  227. sage_wheels/share/factory/gftables/44521 +1486 -0
  228. sage_wheels/share/factory/gftables/4489 +152 -0
  229. sage_wheels/share/factory/gftables/49 +4 -0
  230. sage_wheels/share/factory/gftables/4913 +166 -0
  231. sage_wheels/share/factory/gftables/49729 +1660 -0
  232. sage_wheels/share/factory/gftables/5041 +170 -0
  233. sage_wheels/share/factory/gftables/50653 +1691 -0
  234. sage_wheels/share/factory/gftables/512 +20 -0
  235. sage_wheels/share/factory/gftables/51529 +1720 -0
  236. sage_wheels/share/factory/gftables/52441 +1750 -0
  237. sage_wheels/share/factory/gftables/529 +20 -0
  238. sage_wheels/share/factory/gftables/5329 +180 -0
  239. sage_wheels/share/factory/gftables/54289 +1812 -0
  240. sage_wheels/share/factory/gftables/57121 +1906 -0
  241. sage_wheels/share/factory/gftables/58081 +1938 -0
  242. sage_wheels/share/factory/gftables/59049 +1971 -0
  243. sage_wheels/share/factory/gftables/6241 +210 -0
  244. sage_wheels/share/factory/gftables/625 +23 -0
  245. sage_wheels/share/factory/gftables/63001 +2102 -0
  246. sage_wheels/share/factory/gftables/64 +5 -0
  247. sage_wheels/share/factory/gftables/6561 +221 -0
  248. sage_wheels/share/factory/gftables/6859 +231 -0
  249. sage_wheels/share/factory/gftables/6889 +232 -0
  250. sage_wheels/share/factory/gftables/729 +27 -0
  251. sage_wheels/share/factory/gftables/7921 +266 -0
  252. sage_wheels/share/factory/gftables/8 +3 -0
  253. sage_wheels/share/factory/gftables/81 +5 -0
  254. sage_wheels/share/factory/gftables/8192 +276 -0
  255. sage_wheels/share/factory/gftables/841 +30 -0
  256. sage_wheels/share/factory/gftables/9 +3 -0
  257. sage_wheels/share/factory/gftables/9409 +316 -0
  258. sage_wheels/share/factory/gftables/961 +34 -0
  259. sage_wheels/share/info/singular.info +191898 -0
  260. sage_wheels/share/singular/LIB/GND.lib +1359 -0
  261. sage_wheels/share/singular/LIB/JMBTest.lib +976 -0
  262. sage_wheels/share/singular/LIB/JMSConst.lib +1363 -0
  263. sage_wheels/share/singular/LIB/KVequiv.lib +699 -0
  264. sage_wheels/share/singular/LIB/SingularityDBM.lib +491 -0
  265. sage_wheels/share/singular/LIB/VecField.lib +1542 -0
  266. sage_wheels/share/singular/LIB/absfact.lib +959 -0
  267. sage_wheels/share/singular/LIB/ainvar.lib +730 -0
  268. sage_wheels/share/singular/LIB/aksaka.lib +419 -0
  269. sage_wheels/share/singular/LIB/alexpoly.lib +2542 -0
  270. sage_wheels/share/singular/LIB/algebra.lib +1193 -0
  271. sage_wheels/share/singular/LIB/all.lib +136 -0
  272. sage_wheels/share/singular/LIB/arcpoint.lib +514 -0
  273. sage_wheels/share/singular/LIB/arnold.lib +4553 -0
  274. sage_wheels/share/singular/LIB/arnoldclassify.lib +2058 -0
  275. sage_wheels/share/singular/LIB/arr.lib +3486 -0
  276. sage_wheels/share/singular/LIB/assprimeszerodim.lib +755 -0
  277. sage_wheels/share/singular/LIB/autgradalg.lib +3361 -0
  278. sage_wheels/share/singular/LIB/bfun.lib +1964 -0
  279. sage_wheels/share/singular/LIB/bimodules.lib +774 -0
  280. sage_wheels/share/singular/LIB/brillnoether.lib +226 -0
  281. sage_wheels/share/singular/LIB/brnoeth.lib +5017 -0
  282. sage_wheels/share/singular/LIB/central.lib +2169 -0
  283. sage_wheels/share/singular/LIB/chern.lib +4162 -0
  284. sage_wheels/share/singular/LIB/cimonom.lib +571 -0
  285. sage_wheels/share/singular/LIB/cisimplicial.lib +1835 -0
  286. sage_wheels/share/singular/LIB/classify.lib +3239 -0
  287. sage_wheels/share/singular/LIB/classify2.lib +1462 -0
  288. sage_wheels/share/singular/LIB/classifyMapGerms.lib +1515 -0
  289. sage_wheels/share/singular/LIB/classify_aeq.lib +3253 -0
  290. sage_wheels/share/singular/LIB/classifyceq.lib +2092 -0
  291. sage_wheels/share/singular/LIB/classifyci.lib +1133 -0
  292. sage_wheels/share/singular/LIB/combinat.lib +91 -0
  293. sage_wheels/share/singular/LIB/compregb.lib +276 -0
  294. sage_wheels/share/singular/LIB/control.lib +1636 -0
  295. sage_wheels/share/singular/LIB/crypto.lib +3795 -0
  296. sage_wheels/share/singular/LIB/curveInv.lib +667 -0
  297. sage_wheels/share/singular/LIB/curvepar.lib +1817 -0
  298. sage_wheels/share/singular/LIB/customstd.lib +100 -0
  299. sage_wheels/share/singular/LIB/deRham.lib +5979 -0
  300. sage_wheels/share/singular/LIB/decodegb.lib +2134 -0
  301. sage_wheels/share/singular/LIB/decomp.lib +1655 -0
  302. sage_wheels/share/singular/LIB/deflation.lib +872 -0
  303. sage_wheels/share/singular/LIB/deform.lib +925 -0
  304. sage_wheels/share/singular/LIB/difform.lib +3055 -0
  305. sage_wheels/share/singular/LIB/divisors.lib +750 -0
  306. sage_wheels/share/singular/LIB/dmod.lib +5817 -0
  307. sage_wheels/share/singular/LIB/dmodapp.lib +3269 -0
  308. sage_wheels/share/singular/LIB/dmodideal.lib +1211 -0
  309. sage_wheels/share/singular/LIB/dmodloc.lib +2645 -0
  310. sage_wheels/share/singular/LIB/dmodvar.lib +818 -0
  311. sage_wheels/share/singular/LIB/dummy.lib +17 -0
  312. sage_wheels/share/singular/LIB/elim.lib +1009 -0
  313. sage_wheels/share/singular/LIB/ellipticcovers.lib +548 -0
  314. sage_wheels/share/singular/LIB/enumpoints.lib +146 -0
  315. sage_wheels/share/singular/LIB/equising.lib +2127 -0
  316. sage_wheels/share/singular/LIB/ffmodstd.lib +2384 -0
  317. sage_wheels/share/singular/LIB/ffsolve.lib +1289 -0
  318. sage_wheels/share/singular/LIB/findifs.lib +778 -0
  319. sage_wheels/share/singular/LIB/finitediff.lib +1768 -0
  320. sage_wheels/share/singular/LIB/finvar.lib +7989 -0
  321. sage_wheels/share/singular/LIB/fpadim.lib +2429 -0
  322. sage_wheels/share/singular/LIB/fpalgebras.lib +1666 -0
  323. sage_wheels/share/singular/LIB/fpaprops.lib +1462 -0
  324. sage_wheels/share/singular/LIB/freegb.lib +3853 -0
  325. sage_wheels/share/singular/LIB/general.lib +1350 -0
  326. sage_wheels/share/singular/LIB/gfan.lib +1768 -0
  327. sage_wheels/share/singular/LIB/gitfan.lib +3130 -0
  328. sage_wheels/share/singular/LIB/gkdim.lib +99 -0
  329. sage_wheels/share/singular/LIB/gmspoly.lib +589 -0
  330. sage_wheels/share/singular/LIB/gmssing.lib +1739 -0
  331. sage_wheels/share/singular/LIB/goettsche.lib +909 -0
  332. sage_wheels/share/singular/LIB/graal.lib +1366 -0
  333. sage_wheels/share/singular/LIB/gradedModules.lib +2541 -0
  334. sage_wheels/share/singular/LIB/graphics.lib +360 -0
  335. sage_wheels/share/singular/LIB/grobcov.lib +7706 -0
  336. sage_wheels/share/singular/LIB/groups.lib +1123 -0
  337. sage_wheels/share/singular/LIB/grwalk.lib +507 -0
  338. sage_wheels/share/singular/LIB/hdepth.lib +194 -0
  339. sage_wheels/share/singular/LIB/help.cnf +57 -0
  340. sage_wheels/share/singular/LIB/hess.lib +1946 -0
  341. sage_wheels/share/singular/LIB/hnoether.lib +4292 -0
  342. sage_wheels/share/singular/LIB/hodge.lib +400 -0
  343. sage_wheels/share/singular/LIB/homolog.lib +1965 -0
  344. sage_wheels/share/singular/LIB/hyperel.lib +975 -0
  345. sage_wheels/share/singular/LIB/inout.lib +679 -0
  346. sage_wheels/share/singular/LIB/integralbasis.lib +6224 -0
  347. sage_wheels/share/singular/LIB/interval.lib +1418 -0
  348. sage_wheels/share/singular/LIB/intprog.lib +778 -0
  349. sage_wheels/share/singular/LIB/invar.lib +443 -0
  350. sage_wheels/share/singular/LIB/involut.lib +980 -0
  351. sage_wheels/share/singular/LIB/jacobson.lib +1215 -0
  352. sage_wheels/share/singular/LIB/kskernel.lib +534 -0
  353. sage_wheels/share/singular/LIB/latex.lib +3146 -0
  354. sage_wheels/share/singular/LIB/lejeune.lib +651 -0
  355. sage_wheels/share/singular/LIB/linalg.lib +2040 -0
  356. sage_wheels/share/singular/LIB/locnormal.lib +212 -0
  357. sage_wheels/share/singular/LIB/lrcalc.lib +526 -0
  358. sage_wheels/share/singular/LIB/makedbm.lib +294 -0
  359. sage_wheels/share/singular/LIB/mathml.lib +813 -0
  360. sage_wheels/share/singular/LIB/matrix.lib +1372 -0
  361. sage_wheels/share/singular/LIB/maxlike.lib +1132 -0
  362. sage_wheels/share/singular/LIB/methods.lib +212 -0
  363. sage_wheels/share/singular/LIB/moddiq.lib +322 -0
  364. sage_wheels/share/singular/LIB/modfinduni.lib +181 -0
  365. sage_wheels/share/singular/LIB/modnormal.lib +218 -0
  366. sage_wheels/share/singular/LIB/modprimdec.lib +1278 -0
  367. sage_wheels/share/singular/LIB/modquotient.lib +269 -0
  368. sage_wheels/share/singular/LIB/modstd.lib +1024 -0
  369. sage_wheels/share/singular/LIB/modular.lib +545 -0
  370. sage_wheels/share/singular/LIB/modules.lib +2561 -0
  371. sage_wheels/share/singular/LIB/modwalk.lib +609 -0
  372. sage_wheels/share/singular/LIB/mondromy.lib +1016 -0
  373. sage_wheels/share/singular/LIB/monomialideal.lib +3851 -0
  374. sage_wheels/share/singular/LIB/mprimdec.lib +2353 -0
  375. sage_wheels/share/singular/LIB/mregular.lib +1863 -0
  376. sage_wheels/share/singular/LIB/multigrading.lib +5629 -0
  377. sage_wheels/share/singular/LIB/ncHilb.lib +777 -0
  378. sage_wheels/share/singular/LIB/ncModslimgb.lib +791 -0
  379. sage_wheels/share/singular/LIB/ncalg.lib +16311 -0
  380. sage_wheels/share/singular/LIB/ncall.lib +31 -0
  381. sage_wheels/share/singular/LIB/ncdecomp.lib +468 -0
  382. sage_wheels/share/singular/LIB/ncfactor.lib +13371 -0
  383. sage_wheels/share/singular/LIB/ncfrac.lib +1023 -0
  384. sage_wheels/share/singular/LIB/nchilbert.lib +448 -0
  385. sage_wheels/share/singular/LIB/nchomolog.lib +759 -0
  386. sage_wheels/share/singular/LIB/ncloc.lib +361 -0
  387. sage_wheels/share/singular/LIB/ncpreim.lib +795 -0
  388. sage_wheels/share/singular/LIB/ncrat.lib +2849 -0
  389. sage_wheels/share/singular/LIB/nctools.lib +1887 -0
  390. sage_wheels/share/singular/LIB/nets.lib +1456 -0
  391. sage_wheels/share/singular/LIB/nfmodstd.lib +1000 -0
  392. sage_wheels/share/singular/LIB/nfmodsyz.lib +732 -0
  393. sage_wheels/share/singular/LIB/noether.lib +1106 -0
  394. sage_wheels/share/singular/LIB/normal.lib +8700 -0
  395. sage_wheels/share/singular/LIB/normaliz.lib +2226 -0
  396. sage_wheels/share/singular/LIB/ntsolve.lib +362 -0
  397. sage_wheels/share/singular/LIB/numerAlg.lib +560 -0
  398. sage_wheels/share/singular/LIB/numerDecom.lib +2261 -0
  399. sage_wheels/share/singular/LIB/olga.lib +1933 -0
  400. sage_wheels/share/singular/LIB/orbitparam.lib +351 -0
  401. sage_wheels/share/singular/LIB/parallel.lib +319 -0
  402. sage_wheels/share/singular/LIB/paraplanecurves.lib +3110 -0
  403. sage_wheels/share/singular/LIB/perron.lib +202 -0
  404. sage_wheels/share/singular/LIB/pfd.lib +2223 -0
  405. sage_wheels/share/singular/LIB/phindex.lib +642 -0
  406. sage_wheels/share/singular/LIB/pointid.lib +673 -0
  407. sage_wheels/share/singular/LIB/polybori.lib +1430 -0
  408. sage_wheels/share/singular/LIB/polyclass.lib +525 -0
  409. sage_wheels/share/singular/LIB/polylib.lib +1174 -0
  410. sage_wheels/share/singular/LIB/polymake.lib +1902 -0
  411. sage_wheels/share/singular/LIB/presolve.lib +1533 -0
  412. sage_wheels/share/singular/LIB/primdec.lib +9576 -0
  413. sage_wheels/share/singular/LIB/primdecint.lib +1782 -0
  414. sage_wheels/share/singular/LIB/primitiv.lib +401 -0
  415. sage_wheels/share/singular/LIB/puiseuxexpansions.lib +1631 -0
  416. sage_wheels/share/singular/LIB/purityfiltration.lib +960 -0
  417. sage_wheels/share/singular/LIB/qhmoduli.lib +1561 -0
  418. sage_wheels/share/singular/LIB/qmatrix.lib +293 -0
  419. sage_wheels/share/singular/LIB/random.lib +455 -0
  420. sage_wheels/share/singular/LIB/ratgb.lib +489 -0
  421. sage_wheels/share/singular/LIB/realclassify.lib +5759 -0
  422. sage_wheels/share/singular/LIB/realizationMatroids.lib +772 -0
  423. sage_wheels/share/singular/LIB/realrad.lib +1197 -0
  424. sage_wheels/share/singular/LIB/recover.lib +2628 -0
  425. sage_wheels/share/singular/LIB/redcgs.lib +3984 -0
  426. sage_wheels/share/singular/LIB/reesclos.lib +465 -0
  427. sage_wheels/share/singular/LIB/resbinomial.lib +2802 -0
  428. sage_wheels/share/singular/LIB/resgraph.lib +789 -0
  429. sage_wheels/share/singular/LIB/resjung.lib +820 -0
  430. sage_wheels/share/singular/LIB/resolve.lib +5110 -0
  431. sage_wheels/share/singular/LIB/resources.lib +170 -0
  432. sage_wheels/share/singular/LIB/reszeta.lib +5473 -0
  433. sage_wheels/share/singular/LIB/ring.lib +1328 -0
  434. sage_wheels/share/singular/LIB/ringgb.lib +343 -0
  435. sage_wheels/share/singular/LIB/rinvar.lib +1153 -0
  436. sage_wheels/share/singular/LIB/rootisolation.lib +1481 -0
  437. sage_wheels/share/singular/LIB/rootsmr.lib +709 -0
  438. sage_wheels/share/singular/LIB/rootsur.lib +886 -0
  439. sage_wheels/share/singular/LIB/rstandard.lib +607 -0
  440. sage_wheels/share/singular/LIB/rwalk.lib +336 -0
  441. sage_wheels/share/singular/LIB/sagbi.lib +1353 -0
  442. sage_wheels/share/singular/LIB/sagbiNormaliz.lib +1622 -0
  443. sage_wheels/share/singular/LIB/sagbiNormaliz0.lib +1498 -0
  444. sage_wheels/share/singular/LIB/sagbigrob.lib +449 -0
  445. sage_wheels/share/singular/LIB/schreyer.lib +321 -0
  446. sage_wheels/share/singular/LIB/schubert.lib +2551 -0
  447. sage_wheels/share/singular/LIB/sets.lib +524 -0
  448. sage_wheels/share/singular/LIB/sheafcoh.lib +1663 -0
  449. sage_wheels/share/singular/LIB/signcond.lib +437 -0
  450. sage_wheels/share/singular/LIB/sing.lib +1094 -0
  451. sage_wheels/share/singular/LIB/sing4ti2.lib +419 -0
  452. sage_wheels/share/singular/LIB/solve.lib +2243 -0
  453. sage_wheels/share/singular/LIB/spcurve.lib +1077 -0
  454. sage_wheels/share/singular/LIB/spectrum.lib +62 -0
  455. sage_wheels/share/singular/LIB/sresext.lib +757 -0
  456. sage_wheels/share/singular/LIB/ssi.lib +143 -0
  457. sage_wheels/share/singular/LIB/standard.lib +2769 -0
  458. sage_wheels/share/singular/LIB/stanleyreisner.lib +473 -0
  459. sage_wheels/share/singular/LIB/stdmodule.lib +547 -0
  460. sage_wheels/share/singular/LIB/stratify.lib +1070 -0
  461. sage_wheels/share/singular/LIB/surf.lib +506 -0
  462. sage_wheels/share/singular/LIB/surf_jupyter.lib +223 -0
  463. sage_wheels/share/singular/LIB/surfacesignature.lib +522 -0
  464. sage_wheels/share/singular/LIB/surfex.lib +1462 -0
  465. sage_wheels/share/singular/LIB/swalk.lib +877 -0
  466. sage_wheels/share/singular/LIB/symodstd.lib +1570 -0
  467. sage_wheels/share/singular/LIB/systhreads.lib +74 -0
  468. sage_wheels/share/singular/LIB/tasks.lib +1324 -0
  469. sage_wheels/share/singular/LIB/tateProdCplxNegGrad.lib +2412 -0
  470. sage_wheels/share/singular/LIB/teachstd.lib +858 -0
  471. sage_wheels/share/singular/LIB/template.lib +116 -0
  472. sage_wheels/share/singular/LIB/toric.lib +1119 -0
  473. sage_wheels/share/singular/LIB/transformation.lib +116 -0
  474. sage_wheels/share/singular/LIB/triang.lib +1197 -0
  475. sage_wheels/share/singular/LIB/tropical.lib +8741 -0
  476. sage_wheels/share/singular/LIB/tropicalEllipticCovers.lib +2922 -0
  477. sage_wheels/share/singular/LIB/tropicalNewton.lib +1128 -0
  478. sage_wheels/share/singular/LIB/tst.lib +1108 -0
  479. sage_wheels/share/singular/LIB/weierstr.lib +241 -0
  480. sage_wheels/share/singular/LIB/zeroset.lib +1478 -0
  481. sage_wheels/share/singular/emacs/.emacs-general +184 -0
  482. sage_wheels/share/singular/emacs/.emacs-singular +234 -0
  483. sage_wheels/share/singular/emacs/COPYING +44 -0
  484. sage_wheels/share/singular/emacs/cmd-cmpl.el +241 -0
  485. sage_wheels/share/singular/emacs/ex-cmpl.el +1681 -0
  486. sage_wheels/share/singular/emacs/hlp-cmpl.el +4318 -0
  487. sage_wheels/share/singular/emacs/lib-cmpl.el +179 -0
  488. sage_wheels/share/singular/emacs/singular.el +4273 -0
  489. sage_wheels/share/singular/emacs/singular.xpm +39 -0
  490. sage_wheels/share/singular/singular.idx +5002 -0
@@ -0,0 +1,2412 @@
1
+ ///////////////////////////////////////////////////////////////////////////////
2
+ // version ="version tateProdCplxNegGrad.lib 4.2.0.1 Dec_2020 "; //$id$
3
+ info = "
4
+ LIBRARY: tateProdCplxNegGrad.lib for computing sheaf cohomology on product of projective spaces
5
+ AUTHOR: Clara Petroll (petroll@mathematik.uni-kl.de)
6
+ OVERVIEW: In this library, we use Tate resolutions for computing sheaf cohomology of coherent sheaves on products of projective spaces.
7
+ The algorithms can be used for arbitrary products. We work over the multigraded Cox ring and the corresponding exterior
8
+ algebra. Multigraded complexes are realized as the newstruct @code{multigradedcomplex}.
9
+
10
+ The main algorithm is the one for computing subquotient complexes of a Tate resolution. It allows to compute cohomologytables,
11
+ respectively hash table of the dimensions of sheaf cohomology groups.
12
+ REFERENCES: [1] Eisenbud, Erman, Schreyer: Tate Resolutions for Products of Projective Spaces, Acta Mathematica Vietnamica (2015)
13
+ [2] Eisenbud, Erman, Schreyer: Tate Resolutions on Products of Projective Spaces: Cohomology and Direct Image Complexes (2019)
14
+ PROCEDURES:
15
+ productOfProjectiveSpaces(intvec c) creates rings S,E corresponding to the product
16
+ truncateM(module M, intvec c) truncates module M at c
17
+ truncateCoker(module M, intvec c) truncates the cokernel at c
18
+ symExt(matrix m) computes first differential of R(M)
19
+ sufficientlyPositiveMultidegree(module M) computes a sufficiently positive multidegree for M
20
+ tateResolution(module M, intvec low, intvec high) computes subquotient complex of Tate resolution T(F)
21
+ cohomologyMatrix(module M, intvec low, intvec high) computes cohomologymatrix of corresponding sheaf
22
+ cohomologyMatrixFromResolution(multigradedcomplex T, intvec low, intvec high) computes dimensions of sheaf cohomology groups contained in T
23
+ eulerPolynomialTable(module M, intvec low, intvec high) computes table of Euler polynomials
24
+ cohomologyHashTable(module M, intvec low, intvec high) computes cohomology hash table
25
+ twist(module M,intvec c) twists module M by c
26
+ beilinsonWindow(multigradedcomplex T) computes Beilinson window of T
27
+ regionComplex(multigradedcomplex T, intvec d, intvec I, intvec J, intvec K) computes region complex
28
+ strand(multigradedcomplex T, intvec c, intvec J) computes strand
29
+ firstQuadrantComplex(multigradedcomplex T, intvec c) computes first quadrant complex
30
+ lastQuadrantComplex(multigradedcomplex T, intvec c) computes last quadrant complex
31
+ proc shift(multigradedcomplex A, int i) shifts the multigraded complex by i
32
+ ";
33
+
34
+
35
+ ///////////////////////////////////////////////////////////////////////////////
36
+ //include necessary libraries
37
+ LIB "multigrading.lib";
38
+ LIB "matrix.lib";
39
+ LIB "ring.lib";
40
+ LIB "methods.lib";
41
+
42
+ // Idee: in multigradedcomplex noch zusaetzlich ring E speichern
43
+ static proc mod_init()
44
+ {
45
+ newstruct("bundle","module m, int iscoker");
46
+ system("install","bundle","print",printBundle,1);
47
+ newstruct("multigradedcomplex","list differentials, list modules, int shift");
48
+ system("install","multigradedcomplex","print",printMultigradedComplex,1);
49
+ }
50
+
51
+ ///////////////////////////////////////////////////////////////////////////////
52
+ proc printMultigradedComplex(multigradedcomplex C)
53
+ "USAGE: printMultigradedComplex(C); C multigradedcomplex
54
+ RETURN: nothing, prints a multigraded complex
55
+ EXAMPLE: example printMultigradedComplex
56
+ "
57
+ {
58
+ int sizeStringCplx, sizeStringDegrees, i,j;
59
+ string addedStringCplx, addedStringDegrees;
60
+
61
+ if (size(C.modules)==0)
62
+ {
63
+ print(0);
64
+ }
65
+ else
66
+ {
67
+ list exponents;
68
+ string cplx;
69
+ string degrees;
70
+ for (i = 1; i<= size(C.modules)-1; i++)
71
+ {
72
+ if (size(C.modules[i]) > 0)
73
+ {
74
+ addedStringCplx = "E^" + string(size(C.modules[i])) + " <-- ";
75
+ sizeStringCplx = size(addedStringCplx);
76
+ addedStringDegrees = string(-C.shift + i -1);
77
+ sizeStringDegrees = size(addedStringDegrees);
78
+
79
+ if(sizeStringDegrees <= sizeStringCplx)
80
+ {
81
+ for (j = sizeStringDegrees + 1; j<= sizeStringCplx; j++)
82
+ {
83
+ addedStringDegrees = addedStringDegrees + " ";
84
+ }
85
+ }
86
+
87
+ if(sizeStringDegrees > sizeStringCplx)
88
+ {
89
+ for (j = sizeStringCplx + 1; j<= sizeStringDegrees; j++)
90
+ {
91
+ addedStringCplx = addedStringCplx + " ";
92
+ }
93
+ }
94
+
95
+ cplx = cplx + addedStringCplx;
96
+ degrees = degrees + addedStringDegrees;
97
+
98
+ }
99
+ else
100
+ {
101
+ addedStringCplx = "0" + " <-- ";
102
+ sizeStringCplx = size(addedStringCplx);
103
+ addedStringDegrees = string(-C.shift + i -1);
104
+ sizeStringDegrees = size(addedStringDegrees);
105
+
106
+ if(sizeStringDegrees <= sizeStringCplx)
107
+ {
108
+ for (j = sizeStringDegrees + 1; j<= sizeStringCplx; j++)
109
+ {
110
+ addedStringDegrees = addedStringDegrees + " ";
111
+ }
112
+ }
113
+
114
+ if(sizeStringDegrees > sizeStringCplx)
115
+ {
116
+ for (j = sizeStringCplx + 1; j<= sizeStringDegrees; j++)
117
+ {
118
+ addedStringCplx = addedStringCplx + " ";
119
+ }
120
+ }
121
+
122
+
123
+ cplx = cplx + addedStringCplx;
124
+ degrees = degrees + addedStringDegrees;
125
+ }
126
+ }
127
+
128
+ if (size(C.modules[size(C.modules)]) > 0)
129
+ {
130
+ cplx = cplx + "E^" + string(size(C.modules[size(C.modules)]));
131
+ degrees = degrees + string(-C.shift + size(C.modules) -1);
132
+ }
133
+ else
134
+ {
135
+ cplx = cplx + "0";
136
+ degrees = degrees + string(-C.shift + size(C.modules) -1);
137
+ }
138
+
139
+ print(cplx);
140
+ print(degrees);
141
+ }
142
+ }
143
+ example
144
+ {"EXAMPLE:";
145
+ echo = 2;
146
+ intvec c = 1,1;
147
+ def (S,E) = productOfProjectiveSpaces(c);
148
+ intvec low = -3,-3;
149
+ intvec high = 3,3;
150
+ setring(S);
151
+ module M = 0;
152
+ intmat gradeM[2][1] = -1,-1;
153
+ M = setModuleGrading(M,gradeM);
154
+ multigradedcomplex tate;
155
+ (E,tate) = tateResolution(M,low,high);
156
+ setring(E);
157
+ printMultigradedComplex(tate);
158
+ }
159
+
160
+
161
+ ///////////////////////////////////////////////////////////////////////////////
162
+ proc createMultigradedComplex(list reso)
163
+ "USAGE: createMultigradeComplex(reso); reso list
164
+ PURPOSE: transforms a list representing a multigraded complex into the type multigradedcomplex
165
+ ASSUME: first entry of reso is the homological shift, other entries are the differentials (note: with multigrading!)
166
+ RETURN: multigradedcomplex Reso
167
+ "
168
+ {
169
+ multigradedcomplex Reso;
170
+ Reso.shift = reso[1];
171
+ Reso.differentials = delete(reso,1);
172
+
173
+ // create the free modules corresponding to the differentials
174
+ list mods;
175
+ module M;
176
+ for (int i = 1; i <= size(Reso.differentials); i++)
177
+ {
178
+ M = freemodule(nrows(Reso.differentials[i]));
179
+ M = setModuleGrading(M,getModuleGrading(Reso.differentials[i]));
180
+ mods = insert(mods,M,size(mods));
181
+ }
182
+
183
+ // last special case
184
+ M = freemodule(ncols(Reso.differentials[size(Reso.differentials)]));
185
+ M = setModuleGrading(M,multiDeg(Reso.differentials[size(Reso.differentials)]));
186
+ mods = insert(mods,M,size(mods));
187
+ Reso.modules = mods;
188
+ return(Reso);
189
+ }
190
+
191
+
192
+ ///////////////////////////////////////////////////////////////////////////////
193
+ proc productOfProjectiveSpaces(intvec c)
194
+ "USAGE: productOfProjectiveSpaces(c); c intvec
195
+ PURPOSE: creates two rings S and E corresponding to the product of projective spaces P^{c_1} x...x P^{c_t}
196
+ ASSUME: input are two integers or an intvec
197
+ RETURN: two rings S,E (homogeneous coordinate ring and the exterior algebra of P^{c_1} x P^{c_2} x...)
198
+ "
199
+ {
200
+ if (isSmaller(c-c,c) != 1)
201
+ {
202
+ ERROR("Entries of input vector have to be positive.")
203
+ }
204
+
205
+ int i,j,k;
206
+ ring S = 0,(x(0)(0..c[1])),dp;
207
+ for (i=2; i<= size(c); i++)
208
+ {
209
+ ring SHelp(i) = 0,(x(i-1)(0..c[i])),dp;
210
+ setring(SHelp(i));
211
+ for (j = 0; j<= c[i];j++)
212
+ {
213
+ S = addvarsTo(S,string(var(j+1)),0);
214
+ }
215
+ }
216
+
217
+ ring ES = 0,(e(0)(0..c[1])),dp;
218
+ for (i=2; i<= size(c); i++)
219
+ {
220
+ ring EHelp(i) = 0,(e(i-1)(0..c[i])),dp;
221
+ setring(EHelp(i));
222
+ for (j = 0; j<= c[i];j++)
223
+ {
224
+ ES = addvarsTo(ES,string(var(j+1)),0);
225
+ }
226
+ }
227
+ setring(ES);
228
+ ring E = Exterior();
229
+
230
+ // set multigrading
231
+ intmat grading[size(c)][sum(c)+ size(c)];
232
+ k = 1;
233
+ for (i = 1; i<= size(c); i++)
234
+ {
235
+ for (j = 1; j<= c[i] + 1 ; j++)
236
+ {
237
+ grading[i,k] = 1;
238
+ k = k+1;
239
+ }
240
+ }
241
+
242
+ setring(S);
243
+ setBaseMultigrading(grading);
244
+ setring(E);
245
+ setBaseMultigrading(-grading);
246
+
247
+ return(S,E);
248
+ }
249
+ example
250
+ {"EXAMPLE:";
251
+ echo = 2;
252
+ intvec c = 1,2;
253
+ def (S,E) = productOfProjectiveSpaces(c);
254
+ print(S);
255
+ print(E);
256
+
257
+ intvec d = 2,1,2;
258
+ def (S2,E2) = productOfProjectiveSpaces(d);
259
+ print(S2);
260
+ print(E2);
261
+ }
262
+
263
+
264
+ ///////////////////////////////////////////////////////////////////////////////
265
+ proc truncateM(module M, intvec c)
266
+ "USAGE: truncateM(M,c); M module, c intvec
267
+ PURPOSE: truncate M at c
268
+ ASSUME: @code{M} is multigraded S-module with S multigraded ring, c is an intvec of the right length
269
+ RETURN: module, the truncated module M_{>= c}
270
+ NOTE: Output is the truncated module (multigraded , grading is not shifted), works for arbitrary products
271
+ EXAMPLE: example truncateM
272
+ "
273
+ {
274
+ if (gradingAndVectorCompatible(M,c) == 0)
275
+ {
276
+ ERROR("Grading of module and the vector are not compatible.")
277
+ }
278
+
279
+ intmat MGrading = getModuleGrading(M);
280
+ // determine the free module in which M lives
281
+ int n = nrows(M);
282
+
283
+ // compute the module with which we have to intersect the module M in order to obtain generators of the truncation
284
+ ideal F;
285
+ int i,j;
286
+ intvec d;
287
+ module T;
288
+ for (i = 1; i <= n; i++)
289
+ {
290
+ d = c - getColumnIntmat(MGrading,i);
291
+
292
+ for (j = 1; j<= size(d); j++)
293
+ {
294
+ if (d[j] < 0){d[j] = 0;}
295
+ }
296
+
297
+ F = multiDegBasis(d);
298
+ T = T + F*gen(i);
299
+ }
300
+
301
+ // now compute the intersection of M and T
302
+ module intersection = intersect(M,T);
303
+ intersection = setModuleGrading(intersection,MGrading);
304
+ return(intersection);
305
+ }
306
+ example
307
+ {"EXAMPLE:";
308
+ echo = 2;
309
+ intvec c = 1,1,1;
310
+ def(S,E) = productOfProjectiveSpaces(c);
311
+ setring(S);
312
+ intmat grading[3][2] = 0,0,0,0,0,0;
313
+ module te = freemodule(2);
314
+ te = setModuleGrading(te,grading);
315
+ intvec c = 1,1,1;
316
+ module Mtrunc = truncateM(te,c);
317
+ Mtrunc;
318
+ getModuleGrading(Mtrunc);
319
+ multiDeg(Mtrunc);
320
+ }
321
+
322
+
323
+ ///////////////////////////////////////////////////////////////////////////////
324
+ proc truncateCoker(module M, intvec c)
325
+ "USAGE: truncateCoker(M,c); M module, c intvec
326
+ PURPOSE: truncate cokernel coker(M) at the multidegree c
327
+ RETURN: module, which is a presentation matrix of the truncation of coker(M) at c
328
+ EXAMPLE: example truncateCoker
329
+ "
330
+ {
331
+ if (gradingAndVectorCompatible(M,c) == 0)
332
+ {
333
+ ERROR("Grading of module and the vector are not compatible.")
334
+ }
335
+
336
+ module SMod = freemodule(nrows(M));
337
+ SMod = setModuleGrading(SMod,getModuleGrading(M));
338
+ module result = prune(multiDegModulo(truncateM(SMod,c),truncateM(M,c)));
339
+ return(result);
340
+ }
341
+ example
342
+ {"EXAMPLE:";
343
+ echo = 2;
344
+ // example 1
345
+ intvec c1 = 1,1,1;
346
+ def(S1,E1) = productOfProjectiveSpaces(c1);
347
+ setring(S1);
348
+ module M1= 0;
349
+ intmat grading1[3][1] = 0,0,0;
350
+ M1 = setModuleGrading(M1,grading1);
351
+ truncateCoker(M1,c1);
352
+
353
+ // example 2
354
+ intvec c2 = 1,1;
355
+ def (S2,E2) = productOfProjectiveSpaces(c2);
356
+ setring(S2);
357
+ module M2 = 0;
358
+ intmat grading2[2][1] = 0,0;
359
+ M2 = setModuleGrading(M2,grading2);
360
+ truncateCoker(M2,c2);
361
+ }
362
+
363
+
364
+ ///////////////////////////////////////////////////////////////////////////////
365
+ proc symExt(matrix m)
366
+ "USAGE: symExt(m); m matrix
367
+ PURPOSE: computes differential R(M_0) -> R(M_1) for the module M over S corresponding to the linear presentation matrix m, however, in order to
368
+ get the result, m has to be fetched to the exterior algebra E
369
+ ASSUME: m a matrix, linear presentation matrix over S; Note: also works for nonlinear matrices, but makes no sense to use it in this case
370
+ RETURN: matrix B representing R(M_0) -> R(M_1)
371
+ NOTE: output lives in S (not as in Macaulay2 in the ring E, to get the same result, just fetch the matrix to E)
372
+ EXAMPLE: example symExt
373
+ "
374
+ {
375
+ matrix MT = transpose(jacobM(m));
376
+ matrix JN = syz(MT);
377
+ matrix ML[nvars(basering)][1] = maxideal(1);
378
+ matrix A = transpose(outer(ML,unitmat(nrows(m))));
379
+ matrix B = transpose(A*JN);
380
+ return(B);
381
+ }
382
+ example
383
+ {"EXAMPLE:";
384
+ echo = 2;
385
+ intvec c = 1,2;
386
+ def (S,E) = productOfProjectiveSpaces(c);
387
+ setring(S);
388
+ matrix m[4][2] = x(0)(0), x(1)(0),x(0)(1),0,0,x(1)(1), 0,x(1)(2);
389
+ matrix A = symExt(m);
390
+ print(A);
391
+ setring(E);
392
+ print(fetch(S,A));
393
+ }
394
+
395
+
396
+ ///////////////////////////////////////////////////////////////////////////////
397
+ proc sufficientlyPositiveMultidegree(module M)
398
+ "USAGE: sufficientlyPositiveMultidegree(M); M module
399
+ PURPOSE: computes a sufficiently positive multidegree for coker(M)
400
+ ASSUME: M is multigraded S-module
401
+ RETURN: intvec that is sufficiently positive for M
402
+ EXAMPLE: example sufficientlyPositiveMultidegree
403
+ "
404
+ {
405
+ if (M ==0)
406
+ {
407
+ list T = M;
408
+ }
409
+ else
410
+ {
411
+ module free = freemodule(nrows(M));
412
+ free = setModuleGrading(free, getModuleGrading(M));
413
+ list T = multiDegResolution(multiDegModulo(free,M),0,1);
414
+ }
415
+ int lengthResolution = size(T);
416
+ matrix lowerbounds;
417
+ intvec mulReg;
418
+
419
+ for (int i = 1; i<= lengthResolution; i++)
420
+ {
421
+ lowerbounds = concat(lowerbounds, matrix(getModuleGrading(T[i])));
422
+ }
423
+
424
+ lowerbounds = submat(lowerbounds,1..nrows(lowerbounds),2..ncols(lowerbounds));
425
+ mulReg = int(max(lowerbounds[1,1..ncols(lowerbounds)]));
426
+ for (int j = 2; j <= nrows(lowerbounds); j++)
427
+ {
428
+ mulReg = mulReg, int(max(lowerbounds[j,1..ncols(lowerbounds)]));
429
+ }
430
+ return(mulReg);
431
+ }
432
+ example
433
+ {"EXAMPLE:";
434
+ echo = 2;
435
+ // example 1
436
+ intvec c1 = 1,2;
437
+ def (S1,E1) = productOfProjectiveSpaces(c1);
438
+ setring(S1);
439
+ module M1 = x(0)(0),x(1)(0)^3 + x(1)(1)^3 +x(1)(2)^3;
440
+ intmat grading1[2][1] = 0,0;
441
+ M1 = setModuleGrading(M1,grading1);
442
+ sufficientlyPositiveMultidegree(M1);
443
+
444
+ // example 2
445
+ intvec c2 = 1,1;
446
+ def (S2,E2) = productOfProjectiveSpaces(c2);
447
+ setring(S2);
448
+ intmat grading2[2][1] = -1,-1;
449
+ module M2 = 0;
450
+ M2 = setModuleGrading(M2,grading2);
451
+ sufficientlyPositiveMultidegree(M2);
452
+
453
+ // example 3
454
+ intvec c3 = 1,1,1;
455
+ def (S3,E3) = productOfProjectiveSpaces(c3);
456
+ setring(S3);
457
+ module M3 = 0;
458
+ intmat grading3[3][1] = -1,-1,-1;
459
+ M3 = setModuleGrading(M3,grading3);
460
+ sufficientlyPositiveMultidegree(M3);
461
+ }
462
+
463
+
464
+ ///////////////////////////////////////////////////////////////////////////////
465
+ proc tateResolution(module M, intvec low, intvec high)
466
+ "USAGE: tateResolution(M,low,high); M module, L list, low intvec, high intvec
467
+ PURPOSE: compute tate resolution of coker(M) where M is Z^t-graded S-module
468
+ ASSUME: M a module over multigraded ring S
469
+ RETURN: (E,tate), tate a multigradedcomplex, E the ring in which tate has to be viewed,
470
+ however note that tate is not ring dependent
471
+ EXAMPLE: example tateResolution
472
+ "
473
+ {
474
+ if (gradingAndVectorCompatible(M,low) == 0)
475
+ {
476
+ ERROR("Grading of module and the vectors are not compatible.");
477
+ }
478
+ if (isLEQ(low,high) == 0)
479
+ {
480
+ ERROR("intvec low has to be lower or equal to the intvec high.");
481
+ }
482
+
483
+ intvec dims = getDimensionVector(getVariableWeights(basering));
484
+ def (S2,E) = productOfProjectiveSpaces(dims);
485
+ def S = basering;
486
+ intvec regs = sufficientlyPositiveMultidegree(M);
487
+
488
+ intvec hi = max(regs[1],high[1]+1);
489
+ for (int i = 2; i <= size(regs); i++)
490
+ {
491
+ hi = hi, max(regs[i],high[i]+1);
492
+ }
493
+
494
+ // now truncate M at hi
495
+ module N = truncateCoker(M,hi);
496
+
497
+ matrix A = symExt(N);
498
+
499
+ setring(E);
500
+ matrix A = fetch(S,A);
501
+ intmat ASourceGrading[size(hi)][ncols(A)];
502
+ intmat ATargetGrading[size(hi)][nrows(A)] = getTargetGrading(A,ASourceGrading);
503
+ module AMod = setModuleGrading(module(A),ATargetGrading);
504
+ AMod = twist(AMod,-hi);
505
+
506
+ int n = sum(hi)-sum(low) - size(low) + 2;
507
+ def reso = multiDegResolution(AMod,n,1);
508
+ reso = insert(reso,0);
509
+ multigradedcomplex tate = createMultigradedComplex(reso);
510
+
511
+ // for output as in M2, comment the delete commands out and shift by sum(hi)- size(regs) + 2 instead
512
+ tate = deleteFirstEntry(tate);
513
+ tate = deleteFirstEntry(tate);
514
+ tate = shift(tate,sum(hi)-size(regs));
515
+
516
+ return(E,tate);
517
+
518
+ }
519
+ example
520
+ {"EXAMPLE:";
521
+ echo = 2;
522
+ // example 1
523
+ intvec c1 = 1,1,1;
524
+ intvec low1 = 0,0,0;
525
+ intvec high1 = 0,1,0;
526
+ def (S1,E1) = productOfProjectiveSpaces(c1);
527
+ setring(S1);
528
+ module M1 = 0;
529
+ intmat grading1[3][1] = -1,-1,-1;
530
+ M1 = setModuleGrading(M1,grading1);
531
+ multigradedcomplex tate1;
532
+ (E1,tate1) = tateResolution(M1,low1,high1);
533
+ setring(E1);
534
+ tate1;
535
+ tate1.differentials;
536
+
537
+ // example 2
538
+ intvec c2 = 1,2;
539
+ def (S2,E2) = productOfProjectiveSpaces(c2);
540
+ setring(S2);
541
+ intvec low2 = -3,-3;
542
+ intvec high2 = 0,0;
543
+ module M2 = x(0)(0),x(1)(0)^3 + x(1)(1)^3 +x(1)(2)^3;;
544
+ intmat grading2[2][1] = 0,0;
545
+ M2 = setModuleGrading(M2,grading2);
546
+ multigradedcomplex tate2;
547
+ (E2,tate2) = tateResolution(M2,low2,high2);
548
+ setring(E2);
549
+ tate2;
550
+
551
+ // example 3
552
+ intvec c3 = 1,1;
553
+ def (S3,E3) = productOfProjectiveSpaces(c3);
554
+ intvec low3 = -3,-3;
555
+ intvec high3 = 3,3;
556
+ setring(S3);
557
+ module M3 = 0;
558
+ intmat grading3[2][1] = -1,-1;
559
+ M3 = setModuleGrading(M3,grading3);
560
+ multigradedcomplex tate3;
561
+ (E3,tate3) = tateResolution(M3,low3,high3);
562
+ setring(E3);
563
+ tate3;
564
+ }
565
+
566
+
567
+ ///////////////////////////////////////////////////////////////////////////////
568
+ proc cohomologyMatrix(module M, intvec low, intvec high)
569
+ "USAGE: cohomologyMatrix(M,L,low,high); M module, L list, low intvec, high intvec
570
+ PURPOSE: computes the cohomology matrix of the sheaf corresponding to coker(M)
571
+ ASSUME: M module over S, L list of two rings S and E (e.g. result of productOfProjectiveSpaces)
572
+ first entry L[1] = S and L[2] = E, integer vectors low <= high
573
+ RETURN: ring Z in which cohomology matrix lives, it is exported in the variable cohomologymat, cohomologymat covers all cohomology
574
+ groups of twists in the range between low and high
575
+ EXAMPLE: example cohomologyMatrix
576
+ "
577
+ {
578
+ if (gradingAndVectorCompatible(M,low) == 0)
579
+ {
580
+ ERROR("Grading of module and the vectors are not compatible.");
581
+ }
582
+ if (isLEQ(low,high) == 0)
583
+ {
584
+ ERROR("intvec low has to be lower or equal to the intvec high.")
585
+ }
586
+ if (size(low) != 2)
587
+ {
588
+ ERROR("cohomologyMatrixCoker only works for product of two projective spaces, i.e. Z^2 gradings.";)
589
+ }
590
+
591
+ def (E,tate) = tateResolution(M,low, high);
592
+ setring(E);
593
+ list reso = tate.differentials;
594
+ int n = nvars(E)-2; // i.e. if P = P^{n_1} x P^{n_2}, then n = n_1+n_2
595
+
596
+ int i,j,k,d,numhk;
597
+ ring Z = 0,h,dp; // in this ring we compute the cohomologymatrix
598
+ setring(Z);
599
+ matrix cohomologymat[high[2]-low[2]+1][high[1]-low[1]+1];
600
+
601
+ for (i = low[1]; i <= high[1]; i++) //iterate over rows
602
+ {
603
+ for (j = low[2]; j <= high[2]; j++)
604
+ {
605
+ for (k=0; k<= n; k++)
606
+ {
607
+ d = -i-j-k;
608
+ setring(E);
609
+ numhk = 0;
610
+ if (d+1+ tate.shift>= 1 && d+1+tate.shift <= size(tate.modules))
611
+ {
612
+ numhk = countMultiDegree(intvec(i,j),getModuleGrading(tate.modules[d+1+tate.shift]));
613
+ }
614
+ setring(Z);
615
+ cohomologymat[high[2]-j+1,-low[1]+i+1] = cohomologymat[high[2]-j+1,-low[1]+i+1] + numhk * h^k;
616
+ }
617
+ }
618
+ }
619
+ export(cohomologymat);
620
+ return(Z);
621
+ }
622
+ example
623
+ {"EXAMPLE:";
624
+ echo = 2;
625
+ // example 1
626
+ intvec c1 = 1,1;
627
+ def (S1,E1) = productOfProjectiveSpaces(c1);
628
+ intvec low1 = -3,-3;
629
+ intvec high1 = 3,3;
630
+ setring(S1);
631
+ module M1 = 0;
632
+ intmat grading1[2][1] = -1,-1;
633
+ M1 = setModuleGrading(M1,grading1);
634
+ ring Z1 = cohomologyMatrix(M1,low1,high1);
635
+ setring(Z1);
636
+ print(cohomologymat);
637
+
638
+ // example 2
639
+ intvec c2 = 1,2;
640
+ def (S2,E2) = productOfProjectiveSpaces(c2);
641
+ intvec low2 = -3,-3;
642
+ intvec high2 = 0,0;
643
+ setring(S2);
644
+ module M2 = 0;
645
+ intmat grading2[2][1] = 0,0;
646
+ M2 = setModuleGrading(M2,grading2);
647
+ ring Z2 = cohomologyMatrix(M2,low2,high2);
648
+ setring(Z2);
649
+ print(cohomologymat);
650
+
651
+ // example 3
652
+ setring(S2);
653
+ module M3 = x(0)(0),x(1)(0)^3 + x(1)(1)^3 +x(1)(2)^3;
654
+ intmat grading3[2][1] = 0,0;
655
+ M3 = setModuleGrading(M3,grading3);
656
+ ring Z3 = cohomologyMatrix(M3,low2,high2);
657
+ setring(Z3);
658
+ print(cohomologymat);
659
+ }
660
+
661
+
662
+ ///////////////////////////////////////////////////////////////////////////////
663
+ proc cohomologyMatrixFromResolution(multigradedcomplex T, intvec low, intvec high)
664
+ "USAGE: cohomologyMatrixFromResolution(T,low,high); T multigradedcomplex, low intvec, high intvec
665
+ PURPOSE: computes the cohomology matrix corresponding to the multigraded complex T (part of a Tate resolution)
666
+ ASSUME: T is a multigraded complex representing a part of a Tate resolution (for example output of tateResolution), basering is E
667
+ RETURN: ring Z in which cohomology matrix lives, it is exported in the variable cohomologymat, cohomologymat stores information in the range between
668
+ low and high
669
+ EXAMPLE: example cohomologyMatrixFromResolution
670
+ "
671
+ {
672
+ if (size(T.modules[1]) == 0 && size(T.modules) > 1)
673
+ {
674
+ if (gradingAndVectorCompatible(T.modules[2],low) == 0)
675
+ {
676
+ ERROR("Grading of Tate resolution and the vectors are not compatible.");
677
+ }
678
+ }
679
+ else
680
+ {
681
+ if (gradingAndVectorCompatible(T.modules[1],low) == 0)
682
+ {
683
+ ERROR("Grading of Tate resolution and the vectors are not compatible.");
684
+ }
685
+ }
686
+ if (isLEQ(low,high) == 0)
687
+ {
688
+ ERROR("intvec low has to be lower or equal to the intvec high.");
689
+ }
690
+ if (size(low) != 2)
691
+ {
692
+ ERROR("cohomologyMatrixCoker only works for product of two projective spaces, i.e. Z^2 gradings.");
693
+ }
694
+
695
+ ring E = basering;
696
+ int n = nvars(E)-2; // i.e. if P = P^{n_1} x P^{n_2}, then n = n_1+n_2
697
+ // now compute the cohomology table from the tate resolution
698
+ int i,j,k,d,numhk;
699
+ ring Z = 0,h,dp; // in this ring we compute the cohomologymatrix
700
+ setring(Z);
701
+ matrix cohomologymat[high[2]-low[2]+1][high[1]-low[1]+1];
702
+
703
+ for (i = low[1]; i <= high[1]; i++) //iterate over rows
704
+ {
705
+ for (j = low[2]; j <= high[2]; j++)
706
+ {
707
+ // compute the entry (i,j) of the cohomologymatrix
708
+ for (k=0; k<= n; k++)
709
+ {
710
+ // compute coefficient of h^k in entry (i,j)
711
+ // find these information in the term d = -i-j-k
712
+ d = -i-j-k;
713
+ // as we don't shift the resolution by some homological degree, the dth term corresponds
714
+ // to the (d+1+T.shift)th entry in T
715
+ setring(E);
716
+ numhk = 0;
717
+ if (d+1+T.shift >= 1 && d+1+T.shift <= size(T.modules))
718
+ {
719
+ if (size(T.modules[d+1+T.shift]) == 0)
720
+ {
721
+ numhk = 0;
722
+ }
723
+ else
724
+ {
725
+ numhk = countMultiDegree(intvec(i,j),getModuleGrading(T.modules[d+1+T.shift]));
726
+ }
727
+ }
728
+ setring(Z);
729
+ cohomologymat[high[2]-j+1,-low[1]+i+1] = cohomologymat[high[2]-j+1,-low[1]+i+1] + numhk * h^k;
730
+ }
731
+ }
732
+ }
733
+ export(cohomologymat);
734
+ return(Z);
735
+ }
736
+ example
737
+ {"EXAMPLE:";
738
+ echo = 2;
739
+ intvec c = 1,1;
740
+ def (S,E) = productOfProjectiveSpaces(c);
741
+ intvec low = -3,-3;
742
+ intvec high = 3,3;
743
+ setring(S);
744
+ module M = 0;
745
+ intmat grading[2][1] = -1,-1;
746
+ M = setModuleGrading(M,grading);
747
+ multigradedcomplex tate;
748
+ (E,tate) = tateResolution(M,low,high);
749
+ setring(E);
750
+ ring Z = cohomologyMatrixFromResolution(tate,low,high);
751
+ setring(Z);
752
+ print(cohomologymat);
753
+ }
754
+
755
+
756
+ //////////////////////////////////////////////////////////////////////////
757
+ proc eulerPolynomialTable(module M, intvec low, intvec high)
758
+ "USAGE: eulerPolynomialTable(M,low,high); M module, L list, low intvec, high intvec
759
+ PURPOSE: computes hash table of euler polynomials of twists of coker(M) in the range between low and high
760
+ ASSUME: M module, note that at the moment M is a module over S,
761
+ RETURN: (Z,eulerpolynomialtable), where eulerpolynomialtable is a hash table with entries in the ring Z = ZZ[h]
762
+ NOTE: this function works for arbitrary products P^{n_1} x \cdots x P^{n_t} and corresponding Z^t-gradings, entries can be accessed via
763
+ eulerpolynomialtable*(a_1,...,a_t) where a=(a_1,...,a_t) is a multidegree between low and high
764
+ EXAMPLE: example eulerPolynomialTable
765
+ "
766
+ {
767
+ if (gradingAndVectorCompatible(M,low) == 0)
768
+ {
769
+ ERROR("Grading of module and the vector low are not compatible.")
770
+ }
771
+ if (isLEQ(low,high) == 0)
772
+ {
773
+ ERROR("intvec low has to be lower or equal to the intvec high.")
774
+ }
775
+
776
+ int n = nvars(basering)-size(low);
777
+ def (E,tate) = tateResolution(M,low, high);
778
+ setring(E);
779
+
780
+ int i,j,k,d,numhk;
781
+ ring Z = 0,h,dp; // in this ring we compute the eulerpolynomialtable
782
+ setring(Z);
783
+ HashTable eulerpolynomialtable;
784
+ poly eulerpoly;
785
+
786
+ matrix A = vectorsLEQ(high-low);
787
+ intvec entry;
788
+ for (i = 1; i<= ncols(A); i++)
789
+ {
790
+ entry = int(A[1,i]);
791
+
792
+ for (k = 2; k <= nrows(A); k++)
793
+ {
794
+ entry = entry,int(A[k,i]);
795
+ }
796
+ entry = entry +low;
797
+ // now compute euler polynomial
798
+ setring(Z);
799
+ eulerpoly = 0;
800
+
801
+ for (k=0; k<= n; k++)
802
+ {
803
+ d = -sum(entry)-k;
804
+ setring(E);
805
+ numhk = 0;
806
+ if (d+1+tate.shift >= 1 && d+1+tate.shift <= size(tate.modules))
807
+ {
808
+ numhk = countMultiDegree(entry,getModuleGrading(tate.modules[d+1+tate.shift]));
809
+ }
810
+ setring(Z);
811
+ eulerpoly = eulerpoly + numhk * h^k;
812
+ }
813
+ eulerpolynomialtable = eulerpolynomialtable + hashTable(list(entry),list(eulerpoly));
814
+ }
815
+ return(Z,eulerpolynomialtable);
816
+ }
817
+ example
818
+ {"EXAMPLE:";
819
+ echo = 2;
820
+ // example 1
821
+ intvec c1 = 1,1;
822
+ def (S1,E1) = productOfProjectiveSpaces(c1);
823
+ intvec low1 = -3,-3;
824
+ intvec high1 = 3,3;
825
+ setring(S1);
826
+ module M1 = 0;
827
+ intmat grading1[2][1] = -1,-1;
828
+ M1 = setModuleGrading(M1,grading1);
829
+ def (Z1,eulerTable1) = eulerPolynomialTable(M1,low1,high1);
830
+ setring(Z1);
831
+ print(eulerTable1);
832
+ eulerTable1*low1;
833
+
834
+ setring(S1);
835
+ ring Z = cohomologyMatrix(M1,low1,high1);
836
+ setring(Z);
837
+ print(cohomologymat);
838
+
839
+ // example 2
840
+ intvec c2 = 1,1,1;
841
+ def (S2,E2) = productOfProjectiveSpaces(c2);
842
+ setring(S2);
843
+ intvec low2 = 0,0,0;
844
+ intvec high2 = 1,1,1;
845
+ module M2 = 0;
846
+ intmat grading2[3][1] = -1,-1,-1;
847
+ M2 = setModuleGrading(M2,grading2);
848
+ def (Z2,eulerTable2) = eulerPolynomialTable(M2,low2,high2);
849
+ setring(Z2);
850
+ print(eulerTable2);
851
+ }
852
+
853
+
854
+ //////////////////////////////////////////////////////////////////////////
855
+ proc cohomologyHashTable(module M, intvec low, intvec high)
856
+ "USAGE: cohomologyHashTable(M,L,low,high); M module, low intvec, high intvec
857
+ PURPOSE: computes hashtable of sheaf cohomology groups of twists in the range between between low and high corresponding to coker(M)
858
+ ASSUME: M module representing a sheaf F on the product of t projective spaces,
859
+ note that at the moment M is a module over S,
860
+ RETURN: cohomologytable where cohomologytable is a hash table with
861
+ integer vectors in ZZ^{t+1} as keys, entries can be accessed via cohomologytable*(c_1,...,c_t,i) = dim(H^i(F(c_1,...,c_t)))
862
+ NOTE: this function works for arbitrary products P^{n_1} x \cdots x P^{n_t} and corresponding Z^t-gradings
863
+ EXAMPLE: example cohomologyHashTable
864
+ "
865
+ {
866
+ if (gradingAndVectorCompatible(M,low) == 0)
867
+ {
868
+ ERROR("Grading of module and the vector low are not compatible.")
869
+ }
870
+ if (isLEQ(low,high) == 0)
871
+ {
872
+ ERROR("intvec low has to be lower or equal to the intvec high.")
873
+ }
874
+
875
+ int n = nvars(basering)-size(low); // ie if P = P^{n_1} x \cdtos x P^{n_t}, then n = n_1 + \cdots + n_t
876
+ def (E,tate) = tateResolution(M,low, high);
877
+ setring(E);
878
+ int i,j,k,d,numhk;
879
+ HashTable cohomologytable;
880
+
881
+ matrix A = vectorsLEQ(high-low);
882
+ intvec entry;
883
+ for (i = 1; i<= ncols(A); i++)
884
+ {
885
+ entry = int(A[1,i]);
886
+
887
+ for (k = 2; k <= nrows(A); k++)
888
+ {
889
+ entry = entry,int(A[k,i]);
890
+ }
891
+ entry = entry +low;
892
+
893
+ for (k=0; k<= n; k++)
894
+ {
895
+ // compute vorfaktor of h^k in entry (i,j)
896
+ // find these information in the term d = -i-j-k
897
+ d = -sum(entry)-k;
898
+ // as we don't shift the resolution by some homological degree, the dth term corresponds
899
+ // to the (d+tate.shift)th entry in reso
900
+ setring(E);
901
+ numhk = 0;
902
+ if (d+1+tate.shift >= 1 && d+1+tate.shift <= size(tate.modules))
903
+ {
904
+ numhk = countMultiDegree(entry,getModuleGrading(tate.modules[d+1+tate.shift]));
905
+ cohomologytable = cohomologytable + hashTable(list(intvec(entry,k)),list(numhk));
906
+ }
907
+ }
908
+ }
909
+
910
+ return(cohomologytable);
911
+ }
912
+ example
913
+ {"EXAMPLE:";
914
+ echo = 2;
915
+ intvec c = 1,1;
916
+ def (S,E) = productOfProjectiveSpaces(c);
917
+ intvec low = -3,-3;
918
+ intvec high = 3,3;
919
+ setring(S);
920
+ module M = 0;
921
+ intmat grading[2][1] = -1,-1;
922
+ M = setModuleGrading(M,grading);
923
+ def cohomologytable = cohomologyHashTable(M,low,high);
924
+ print(cohomologytable);
925
+ intvec d = 3,3,0;
926
+ cohomologytable*d;
927
+
928
+ def (Z,eulerTable) = eulerPolynomialTable(M,low,high);
929
+ setring(Z);
930
+ print(eulerTable);
931
+ }
932
+
933
+
934
+ //////////////////////////////////////////////////////////////////////////
935
+ proc twist(module M,intvec c)
936
+ "USAGE: twist(M,c); M module, c intvec
937
+ PURPOSE: twists the module M by c
938
+ ASSUME: M is a multigraded module
939
+ RETURN: M with the new grading
940
+ EXAMPLE: example twist
941
+ "
942
+ {
943
+ if (gradingAndVectorCompatible(M,c) == 0)
944
+ {
945
+ ERROR("Grading of module and the vector are not compatible.")
946
+ }
947
+ intmat MGrading = getModuleGrading(M);
948
+ MGrading = MGrading - matrixWithSpecificEntries(nrows(MGrading),ncols(MGrading),c);
949
+ module Mtwisted = setModuleGrading(M,MGrading);
950
+ return(Mtwisted);
951
+ }
952
+ example
953
+ {"EXAMPLE:";
954
+ echo = 2;
955
+ intvec c = 1,1;
956
+ def (S,E) = productOfProjectiveSpaces(c);
957
+ setring(S);
958
+ module M = freemodule(2);
959
+ intmat gradeM[2][2] = 0,1,0,1;
960
+ M = setModuleGrading(M,gradeM);
961
+ getModuleGrading(M);
962
+ intvec c = 2,2;
963
+ module Mtwist = twist(M,c);
964
+ getModuleGrading(Mtwist);
965
+ }
966
+
967
+
968
+ ///////////////////////////////////////////////////////////////////////////////
969
+ proc beilinsonWindow(multigradedcomplex T)
970
+ "USAGE: beilinsonWindow(T); T multigradedcomplex
971
+ PURPSOSE:compute the subquotient complex of T consisting of summands generated in degrees 0 <= a <= n
972
+ ASSUME: T is a multigraded complex of free E-modules
973
+ RETURN: multigradedcomplex, the Beilinson window of T
974
+ NOTE: The returned summands are the only ones that contribute to the Beilinson monad.
975
+ EXAMPLE: example beilinsonWindow
976
+ "
977
+ {
978
+ int i,j;
979
+ intvec b,c;
980
+ matrix A,B;
981
+ intmat grad;
982
+
983
+ intvec n = getDimensionVector(getVariableWeights(basering));
984
+
985
+ // go through all modules in the complex
986
+ for (i = size(T.modules); i >= 1; i--)
987
+ {
988
+ c = inBeilinsonWindow(getModuleGrading(T.modules[i]),n);
989
+ if (size(c)>1)
990
+ {
991
+ // need to determine the module grading
992
+ T.modules[i] = setModuleGrading(freemodule(size(c)-1),deleteColumnsIntmat(getModuleGrading(T.modules[i]),c));
993
+
994
+ if(i > 2 && i <= size(T.differentials))
995
+ {
996
+ //delete rows and columns in the corresponding maps
997
+ // delete rows in T.differentials[i] and adjust the module grading
998
+ A = matrix(T.differentials[i]);
999
+ A = deleteRows(A,c);
1000
+ T.differentials[i] = setModuleGrading(module(A),deleteColumnsIntmat(getModuleGrading(T.differentials[i]),c));
1001
+ //delete columns in T.differentials[i-1] if i > 2
1002
+ //delete columns in T.differentials[i-1]
1003
+ A = matrix(T.differentials[i-1]);
1004
+ A = deleteColumns(A,c);
1005
+ T.differentials[i-1] = setModuleGrading(module(A),getModuleGrading(T.differentials[i-1]));
1006
+ }
1007
+ else
1008
+ {
1009
+ if(i == 1)
1010
+ {
1011
+ //only have to delete rows
1012
+ A = matrix(T.differentials[i]);
1013
+ A = deleteRows(A,c);
1014
+ T.differentials[i] = setModuleGrading(module(A),deleteColumnsIntmat(getModuleGrading(T.differentials[i]),c));
1015
+ }
1016
+ else
1017
+ {
1018
+ // only have to delete columns
1019
+ A = matrix(T.differentials[i-1]);
1020
+ A = deleteColumns(A,c);
1021
+ T.differentials[i-1] = setModuleGrading(module(A),getModuleGrading(T.differentials[i-1]));
1022
+ }
1023
+ }
1024
+ }
1025
+ else
1026
+ {
1027
+ T.modules[i] = freemodule(0);
1028
+ }
1029
+
1030
+ }
1031
+
1032
+ T = deleteZerosMultigradedComplex(T);
1033
+
1034
+ return(T);
1035
+ }
1036
+ example
1037
+ {"EXAMPLE:";
1038
+ echo = 2;
1039
+ intvec f = 1,1;
1040
+ def (S,E) = productOfProjectiveSpaces(f);
1041
+ intvec low = -3,-3;
1042
+ intvec high = 3,3;
1043
+ setring(S);
1044
+ module M = 0;
1045
+ intmat MGrading[2][1] = -1,-1;
1046
+ M = setModuleGrading(M,MGrading);
1047
+ multigradedcomplex tate;
1048
+ (E,tate) = tateResolution(M,low,high);
1049
+ setring(E);
1050
+ multigradedcomplex W = beilinsonWindow(tate);
1051
+ W;
1052
+
1053
+ intvec c = 1,1,1;
1054
+ intvec low2 = 0,0,0;
1055
+ intvec high2 = 0,1,0;
1056
+ def (S2,E2) = productOfProjectiveSpaces(c);
1057
+ setring(S2);
1058
+ module M2 = 0;
1059
+ intmat gradeM[3][1] = -1,-1,-1;
1060
+ M2 = setModuleGrading(M2,gradeM);
1061
+ multigradedcomplex tate2;
1062
+ (E2,tate2) = tateResolution(M2,low2,high2);
1063
+ setring(E2);
1064
+ multigradedcomplex W2 = beilinsonWindow(tate2);
1065
+ W2;
1066
+ }
1067
+
1068
+
1069
+ ///////////////////////////////////////////////////////////////////////////////
1070
+ proc regionComplex(multigradedcomplex T, intvec d, intvec I, intvec J, intvec K)
1071
+ "USAGE: regionComplex(T,d,I,J,K); T multigradedcomplex, d intvec, I intvec, J intvec, K intvec
1072
+ PURPOSE: compute the region complex of T w.r.t. the sets I,J,K and the vector d
1073
+ ASSUME: I,J,K are intvecs representing disjoint subsets of {1,...,t}, T is a complex in ring E, zero represents the empty set
1074
+ RETURN: multigraded complex which is the region complex T_d(I,J,K) of T
1075
+ EXAMPLE: example regionComplex
1076
+ "
1077
+ {
1078
+ if (isDisjoint(I,J,K) == 0)
1079
+ {
1080
+ ERROR("I,J,K have to be disjoint.");
1081
+ }
1082
+
1083
+ int i;
1084
+ intvec c;
1085
+ matrix A,B;
1086
+ intmat grad;
1087
+
1088
+ // go through all modules in the complex T
1089
+ for (i = size(T.modules); i>= 1; i--)
1090
+ {
1091
+ c = goodColumns(getModuleGrading(T.modules[i]),d,I,J,K);
1092
+ // analogous procedure to beilinsonWindow
1093
+ if (size(c)>1)
1094
+ {
1095
+ // need to determine the module grading
1096
+ T.modules[i] = setModuleGrading(freemodule(size(c)-1),deleteColumnsIntmat(getModuleGrading(T.modules[i]),c));
1097
+
1098
+ if(i > 2 && i <= size(T.differentials))
1099
+ {
1100
+ //delete rows and columns in the corresponding maps
1101
+ // delete rows in T.differentials[i] and adjust the module grading
1102
+ A = matrix(T.differentials[i]);
1103
+ A = deleteRows(A,c);
1104
+ T.differentials[i] = setModuleGrading(module(A),deleteColumnsIntmat(getModuleGrading(T.differentials[i]),c));
1105
+ //delete columns in T.differentials[i-1] if i > 2
1106
+ //delete columns in T.differentials[i-1]
1107
+ A = matrix(T.differentials[i-1]);
1108
+ A = deleteColumns(A,c);
1109
+ T.differentials[i-1] = setModuleGrading(module(A),getModuleGrading(T.differentials[i-1]));
1110
+ }
1111
+ else
1112
+ {
1113
+ if(i == 1)
1114
+ {
1115
+ //only have to delete rows
1116
+ A = matrix(T.differentials[i]);
1117
+ A = deleteRows(A,c);
1118
+ T.differentials[i] = setModuleGrading(module(A),deleteColumnsIntmat(getModuleGrading(T.differentials[i]),c));
1119
+ }
1120
+ else
1121
+ {
1122
+ // only have to delete columns
1123
+ A = matrix(T.differentials[i-1]);
1124
+ A = deleteColumns(A,c);
1125
+ T.differentials[i-1] = setModuleGrading(module(A),getModuleGrading(T.differentials[i-1]));
1126
+ }
1127
+ }
1128
+ }
1129
+ else
1130
+ {
1131
+ T.modules[i] = freemodule(0);
1132
+ }
1133
+ }
1134
+ // delete not necessary zeros in T
1135
+ T = deleteZerosMultigradedComplex(T);
1136
+ return(T);
1137
+ }
1138
+ example
1139
+ {"EXAMPLE:";
1140
+ echo = 2;
1141
+ intvec f = 1,1;
1142
+ def (S,E) = productOfProjectiveSpaces(f);
1143
+ intvec low = -3,-3;
1144
+ intvec high = 3,3;
1145
+ setring(S);
1146
+ module M = 0;
1147
+ intmat MGrading[2][1] = -1,-1;
1148
+ M = setModuleGrading(M,MGrading);
1149
+ multigradedcomplex tate;
1150
+ (E,tate) = tateResolution(M,low,high);
1151
+ setring(E);
1152
+ tate;
1153
+
1154
+ ring Z = cohomologyMatrixFromResolution(tate,low,high);
1155
+ setring(Z);
1156
+ print(cohomologymat);
1157
+
1158
+ setring(E);
1159
+ intvec c= 0,-3;
1160
+ intvec I = 0;
1161
+ intvec J = 0,1;
1162
+ intvec K = 0,2;
1163
+ multigradedcomplex U = regionComplex(tate,c,I,J,K);
1164
+ U;
1165
+
1166
+ Z = cohomologyMatrixFromResolution(U,low,high);
1167
+ setring(Z);
1168
+ print(cohomologymat);
1169
+
1170
+ setring(E);
1171
+ multigradedcomplex V = regionComplex(tate,c,I,J,J);
1172
+ }
1173
+
1174
+
1175
+ ///////////////////////////////////////////////////////////////////////////////
1176
+ proc strand(multigradedcomplex T, intvec c, intvec J)
1177
+ "USAGE: strand(T,c,J)
1178
+ PURPOSE: compute the strand of T w.r.t. the set J and the vector c
1179
+ RETURN: subquotient complex of T which is the strand of T
1180
+ EXAMPLE: example strand
1181
+ "
1182
+ {
1183
+ // if first entry of I is not 0, then add 0 for better compatibility
1184
+ if (J[1] != 0)
1185
+ {
1186
+ J = 0,J;
1187
+ }
1188
+ intvec I,K;
1189
+
1190
+ return(regionComplex(T,c,I,J,K));
1191
+ }
1192
+ example
1193
+ {"EXAMPLE:";
1194
+ echo = 2;
1195
+ intvec f = 1,1;
1196
+ def (S,E) = productOfProjectiveSpaces(f);
1197
+ intvec low = -3,-3;
1198
+ intvec high = 3,3;
1199
+ setring(S);
1200
+ module M = 0;
1201
+ intmat MGrading[2][1] = -1,-1;
1202
+ M = setModuleGrading(M,MGrading);
1203
+ multigradedcomplex tate;
1204
+ (E,tate) = tateResolution(M,low,high);
1205
+ setring(E);
1206
+
1207
+ ring Z = cohomologyMatrixFromResolution(tate,low,high);
1208
+ setring(Z);
1209
+ print(cohomologymat);
1210
+
1211
+ setring(E);
1212
+ intvec c= 0,-3;
1213
+ intvec J = 1;
1214
+ multigradedcomplex U = strand(tate,c,J);
1215
+ U;
1216
+
1217
+ Z = cohomologyMatrixFromResolution(U,low,high);
1218
+ setring(Z);
1219
+ print(cohomologymat);
1220
+ }
1221
+
1222
+
1223
+ ////////////////////////////////////////////////////////////////////////////
1224
+ proc firstQuadrantComplex(multigradedcomplex T, intvec c)
1225
+ "USAGE: firstQuadrantComplex(T,c); T multigradedcomplex, c intvec
1226
+ PURPOSE: compute the first quadrant complex of T w.r.t. the set J and the vector c
1227
+ RETURN: subquotient complex of T which is the first quadrand complex of T
1228
+ "
1229
+ {
1230
+ intvec K = 0,1..size(c);
1231
+ intvec I,J;
1232
+ return(regionComplex(T,c,I,J,K));
1233
+ }
1234
+
1235
+
1236
+ ///////////////////////////////////////////////////////////////////////////////
1237
+ proc lastQuadrantComplex(multigradedcomplex T, intvec c)
1238
+ "USAGE: lastQuadrantComplex(T,c); T multigradedcomplex, c intvec
1239
+ PURPOSE: compute the last quadrant complex of T w.r.t. the set J and the vector c
1240
+ RETURN: subquotient complex of T which is the strand of T
1241
+ "
1242
+ {
1243
+ intvec I = 0,1..size(c);
1244
+ intvec J,K;
1245
+ return(regionComplex(T,c,I,J,K));
1246
+ }
1247
+
1248
+
1249
+ ///////////////////////////////////////////////////////////////////////////////
1250
+ proc sortedBases(int i)
1251
+ "USAGE: computes a list sortedB where in each entry k we have sortedB[k] = all monomials of degree k*e_i
1252
+ (sorted)
1253
+ ASSUME: We are working over a multigraded ring
1254
+ RETURN: list sortedB
1255
+ EXAMPLE: example sortedB
1256
+ "
1257
+ {
1258
+ intvec d = 1..nrows(getVariableWeights(basering));
1259
+ d = d-d;
1260
+ d[i] = 1;
1261
+ int j,n;
1262
+ n = countMultiDegree(d, getVariableWeights(basering));
1263
+ list sortedB;
1264
+ for (j = 0; j <= n; j++)
1265
+ {
1266
+ sortedB = insert(sortedB,multiDegBasis(j*d),size(sortedB));
1267
+ }
1268
+ return(sortedB);
1269
+ }
1270
+ example
1271
+ {"EXAMPLE:";
1272
+ echo = 2;
1273
+ intvec f = 2,3;
1274
+ def (S,E) = productOfProjectiveSpaces(f);
1275
+ setring(E);
1276
+ list sortedB = sortedBases(1);
1277
+ sortedB;
1278
+ }
1279
+
1280
+
1281
+ ///////////////////////////////////////////////////////////////////////////////
1282
+ proc diffAntiCommutative(ideal I, ideal J)
1283
+ "USAGE: differentiate the second input by the first
1284
+ ASSUME: We are working over anticommutative E
1285
+ RETURN: matrix D
1286
+ EXAMPLE: example diffAntiCommutative
1287
+ "
1288
+ {
1289
+ matrix D = diff(I,J);
1290
+ //now have to correct the signs since Singular does not do it right...?
1291
+ int i,j;
1292
+ for (i = 1; i<= nrows(D); i++)
1293
+ {
1294
+ for(j = 1; j<=ncols(D);j++)
1295
+ {
1296
+ if (D[i,j]*I[i] == -J[j])
1297
+ {
1298
+ D[i,j] = -D[i,j];
1299
+ }
1300
+ }
1301
+ }
1302
+ return(D);
1303
+ }
1304
+ example
1305
+ {"EXAMPLE:";
1306
+ echo = 2;
1307
+ intvec f = 2,3;
1308
+ def (S,E) = productOfProjectiveSpaces(f);
1309
+ setring(E);
1310
+ list sortedB = sortedBases(1);
1311
+ sortedB[2];
1312
+ sortedB[3];
1313
+
1314
+ print(diff(sortedB[],sortedB[3]));
1315
+
1316
+ print(diffAntiCommutative(sortedB[2],sortedB[3]));
1317
+ }
1318
+
1319
+
1320
+ ///////////////////////////////////////////////////////////////////////////////
1321
+ proc koszulmap(int i, list sortedB)
1322
+ "USAGE: computes the ith koszul map
1323
+ ASSUME: basering ist E, assume sortedB is a list of sorted bases (result of sortedBases)
1324
+ NOTE: in contrast to the function in M2 we remain in the ring E, to get the real koszul map have to substitute vars of S
1325
+ RETURN: matrix K
1326
+ EXAMPLE: example koszulmap
1327
+ "
1328
+ {
1329
+ matrix D;
1330
+ if (i == 0)
1331
+ {
1332
+ D = matrix(0);
1333
+ }
1334
+ else
1335
+ {
1336
+ intvec d = multiDeg(sortedB[2][1]);
1337
+ D = diffAntiCommutative(sortedB[i],sortedB[i+1]);
1338
+ }
1339
+ return(D);
1340
+ }
1341
+ example
1342
+ {"EXAMPLE:";
1343
+ echo = 2;
1344
+ intvec f = 2,3;
1345
+ def (S,E) = productOfProjectiveSpaces(f);
1346
+ setring(E);
1347
+ list sortedB = sortedBases(2);
1348
+
1349
+ matrix K1 = koszulmap(1,sortedB);
1350
+ matrix K2 = koszulmap(2,sortedB);
1351
+
1352
+ setring(S);
1353
+
1354
+ print(fetch(E,K1));
1355
+ print(fetch(E,K2));
1356
+ }
1357
+
1358
+
1359
+ ///////////////////////////////////////////////////////////////////////////////
1360
+ proc simpleBeilinsonBundle(int a, int w, list L)
1361
+ "USAGE: computes a basic beilinson bundle (i.e. the pullback of a single projective space factor),
1362
+ with notation in the paper: it computes \wedge^a U_w
1363
+ ASSUME: the current basering is S, L ist list with entry E (ring);
1364
+ if P = P^{n_1} x....xP^{n_t}, then 1<=w <= t and 0 <= a <= n_w,
1365
+ if the inputs are not in this range, then the zero module is returned
1366
+ NOTE:
1367
+ RETURN: a bundle (associated sheaf to module over S), the associated sheaf to the cokernel of it is the beilinson bundle
1368
+ EXAMPLE: example simpleBeilinsonBundle
1369
+ "
1370
+ {
1371
+ ring S = basering;
1372
+ def E = L[1];
1373
+ int t = nrows(getVariableWeights(S));
1374
+ bundle B;
1375
+ module M;
1376
+
1377
+ if ( w<1 || w>t)
1378
+ {
1379
+ return(B); // return the zero module
1380
+ }
1381
+
1382
+ // initialize unit vector with one in position w
1383
+ intvec d = (1..t) - (1..t);
1384
+ d[w] = 1;
1385
+ int j;
1386
+ int nw = countMultiDegree(d, getVariableWeights(S));
1387
+
1388
+ if ( a < 0 || a > nw )
1389
+ {
1390
+ return(B); // return the zero bundle
1391
+ }
1392
+
1393
+
1394
+ if ( a == 0)
1395
+ {
1396
+ M = freemodule(1);
1397
+ intmat gradeM[t][1];
1398
+ M = setModuleGrading(M,gradeM);
1399
+ B.m = M;
1400
+
1401
+ }
1402
+ else
1403
+ {
1404
+ if (a == nw +1)
1405
+ {
1406
+ M = freemodule(1);
1407
+ intmat gradeM[t][1]
1408
+ gradeM[w,1] = 1;
1409
+ M = setModuleGrading(M,gradeM);
1410
+ B.m = M;
1411
+ }
1412
+ else
1413
+ {
1414
+ setring(E);
1415
+ list sortedB = sortedBases(w);
1416
+ matrix K = koszulmap(a + 2,sortedB);
1417
+ setring(S);
1418
+ matrix K = fetch(E,K);
1419
+ // have to add multigrading
1420
+ B.iscoker = 1;
1421
+ M = module(K);
1422
+ intmat gradeM[t][nrows(M)];
1423
+ M = setModuleGrading(M,gradeM);
1424
+ B.m = twist(M,-d); //STIMMT DAS SO WIRKLICH?
1425
+ }
1426
+ }
1427
+ return(B);
1428
+ }
1429
+ example
1430
+ {"EXAMPLE:";
1431
+ echo = 2;
1432
+ intvec f = 2,3;
1433
+ def (S,E) = productOfProjectiveSpaces(f);
1434
+ setring(S);
1435
+ bundle B = simpleBeilinsonBundle(1,1,E);
1436
+ print(B);
1437
+ getModuleGrading(B.m);
1438
+
1439
+ simpleBeilinsonBundle(1,2,E);
1440
+ }
1441
+
1442
+
1443
+ ///////////////////////////////////////////////////////////////////////////////
1444
+ proc beilinsonBundle(intvec a, list L)
1445
+ "USAGE: computes a beilinson bundle (i.e. the pullback of a single projective space factor),
1446
+ with notation in the paper: it computes U^a
1447
+ ASSUME: the current basering is S, L ist list with entry E (ring);
1448
+ if P = P^{n_1} x....xP^{n_t}, size(a)=t and 0 <= a_i <= n_i
1449
+ if the inputs are not in this range, then the zero module is returned
1450
+ NOTE:
1451
+ RETURN: a bundle (associated sheaf to module over S), the associated sheaf to the cokernel of it is the beilinson bundle
1452
+ EXAMPLE: example beilinsonBundle
1453
+ "
1454
+ {
1455
+ ring S = basering;
1456
+ int t = nrows(getVariableWeights(S));
1457
+ if(size(a) != t)
1458
+ {
1459
+ ERROR("Size of input vector a and number t of projective spaces are not compatible.")
1460
+ }
1461
+ int i;
1462
+ bundle B = simpleBeilinsonBundle(a[1],1,L);
1463
+ for (i = 2; i<= t; i++)
1464
+ {
1465
+ B = tensorBundle(B,simpleBeilinsonBundle(a[i],i,L));
1466
+ }
1467
+ return(B);
1468
+ }
1469
+ example
1470
+ {"EXAMPLE:";
1471
+ echo = 2;
1472
+ intvec f = 2,3;
1473
+ def (S,E) = productOfProjectiveSpaces(f);
1474
+ setring(S);
1475
+ intvec c = 1,1;
1476
+ bundle B = beilinsonBundle(c,E);
1477
+ B;
1478
+
1479
+ bundle B1 = simpleBeilinsonBundle(1,1,E);
1480
+ bundle B2 = simpleBeilinsonBundle(1,2,E);
1481
+ bundle B3 = tensorBundle(B1,B2);
1482
+ B3;
1483
+
1484
+ }
1485
+
1486
+
1487
+ ///////////////////////////////////////////////////////////////////////////////
1488
+ proc printBundle(bundle B)
1489
+ "USAGE: prints a bundle
1490
+ RETURN: nothing
1491
+ "
1492
+ {
1493
+ if(B.iscoker == 1)
1494
+ {
1495
+ print("coker");
1496
+ print(B.m);
1497
+ }
1498
+
1499
+ else
1500
+ {
1501
+ print(B.m)
1502
+ }
1503
+ }
1504
+
1505
+
1506
+ ///////////////////////////////////////////////////////////////////////////////
1507
+ proc tensorBundle(bundle B1, bundle B2)
1508
+ "USAGE: computes the tensor product of the bundles
1509
+ RETURN: a bundle
1510
+ EXAMPLE: example tensorBundle
1511
+ "
1512
+ {
1513
+ bundle B;
1514
+
1515
+ // first have to consider the two special cases
1516
+ if (B1.iscoker == 0 || B2.iscoker == 0)
1517
+ {
1518
+ if (B1.iscoker == 0)
1519
+ {
1520
+ if (B1.m == 0)
1521
+ {
1522
+ // return 0
1523
+ B = B1;
1524
+ }
1525
+ else
1526
+ {
1527
+ // then B1.m is just the free module of rank 1
1528
+ B = B2;
1529
+ }
1530
+ }
1531
+ else
1532
+ {
1533
+ if (B2.m == 0)
1534
+ {
1535
+ // return 0
1536
+ B = B2;
1537
+ }
1538
+ else
1539
+ {
1540
+ // then B2.m is just the free module of rank 1
1541
+ B = B1;
1542
+ }
1543
+ }
1544
+ }
1545
+ else
1546
+ {
1547
+ B.iscoker = 1;
1548
+ B.m = multiDegTensor(B1.m,B2.m);
1549
+ }
1550
+ return(B);
1551
+ }
1552
+ example
1553
+ {"EXAMPLE:";
1554
+ echo = 2;
1555
+ intvec f = 2,3;
1556
+ def (S,E) = productOfProjectiveSpaces(f);
1557
+ setring(S);
1558
+ bundle B1 = simpleBeilinsonBundle(1,1,E);
1559
+ bundle B2 = simpleBeilinsonBundle(1,2,E);
1560
+
1561
+ bundle B3 = simpleBeilinsonBundle(1,0,E); // zero bundle
1562
+ bundle B4 = simpleBeilinsonBundle(0,1,E);
1563
+
1564
+ bundle B5 = tensorBundle(B1,B2);
1565
+ B5;
1566
+
1567
+ bundle B6 = tensorBundle(B2,B3);
1568
+ B6;
1569
+
1570
+ bundle B7 = tensorBundle(B2,B4);
1571
+ B7;
1572
+ }
1573
+
1574
+
1575
+ ///////////////////////////////////////////////////////////////////////////////
1576
+ proc directSumBundle(bundle B1, bundle B2)
1577
+ "USAGE: computes the direct sum of the bundles B1 and B2
1578
+ RETURN: a bundle
1579
+ EXAMPLE: example directSumBundle
1580
+ "
1581
+ {
1582
+ bundle B;
1583
+ module M;
1584
+ // first have to consider the special cases
1585
+ if (B1.iscoker == 0 || B2.iscoker == 0)
1586
+ {
1587
+ if (B1.iscoker == 0)
1588
+ {
1589
+ if(B1.m == 0 || B2.m == 0)
1590
+ {
1591
+ // return B2
1592
+ B = B2;
1593
+ }
1594
+ else
1595
+ {
1596
+ // then B1.m is just the free module of rank 1
1597
+ if(B2.iscoker == 0)
1598
+ {
1599
+ // both bundles are the bundles corresponding to S^1
1600
+ M = freemodule(2);
1601
+ intmat grading[2][2];
1602
+ M = setModuleGrading(M,grading);
1603
+ B.m = M;
1604
+ }
1605
+ else
1606
+ {
1607
+ // have to add zero row to B2.m
1608
+ matrix z[ncols(B2.m)][1];
1609
+ M = module(transpose(concat(z,transpose(B2.m))));
1610
+ intmat grading = concatIntmat(getModuleGrading(B1.m),getModuleGrading(B2.m));
1611
+ M = setModuleGrading(M,grading);
1612
+ B.iscoker = 1;
1613
+ B.m = M;
1614
+ }
1615
+ }
1616
+ }
1617
+ else
1618
+ {
1619
+ if (B2.m == 0)
1620
+ {
1621
+ // return B1
1622
+ B = B1;
1623
+ }
1624
+ else
1625
+ {
1626
+ // then B2.m is just the free module of rank 1
1627
+ // have to add zero row to B1.m
1628
+ matrix z[ncols(B1.m)][1];
1629
+ M = module(transpose(concat(transpose(B1.m),z)));
1630
+ intmat grading = concatIntmat(getModuleGrading(B1.m),getModuleGrading(B2.m));
1631
+ M = setModuleGrading(M,grading);
1632
+ B.iscoker = 1;
1633
+ B.m = M;
1634
+ }
1635
+ }
1636
+ }
1637
+ else
1638
+ {
1639
+ intmat grading = concatIntmat(getModuleGrading(B1.m), getModuleGrading(B2.m));
1640
+ // need to construct the new matrix
1641
+ matrix M1[nrows(B1.m)][ncols(B2.m)];
1642
+ matrix M2[nrows(B2.m)][ncols(B1.m)];
1643
+ M1 = transpose(concat(B1.m,M1));
1644
+ M2 = transpose(concat(M2,B2.m));
1645
+ M = module(transpose(concat(M1,M2)));
1646
+ M = setModuleGrading(M,grading);
1647
+ B.iscoker = 1;
1648
+ B.m = M;
1649
+ }
1650
+
1651
+ return(B);
1652
+ }
1653
+ example
1654
+ {"EXAMPLE:";
1655
+ echo = 2;
1656
+ intvec f = 2,3;
1657
+ def (S,E) = productOfProjectiveSpaces(f);
1658
+ setring(S);
1659
+
1660
+ bundle B1 = simpleBeilinsonBundle(1,1,E);
1661
+ bundle B2 = simpleBeilinsonBundle(1,2,E);
1662
+ bundle B3 = simpleBeilinsonBundle(1,0,E); // zero bundle
1663
+ bundle B4 = simpleBeilinsonBundle(0,1,E);
1664
+
1665
+ bundle B5 = directSumBundle(B1,B2);
1666
+ B5;
1667
+
1668
+ bundle B6 = directSumBundle(B3,B2);
1669
+ B6;
1670
+
1671
+ bundle B7 = directSumBundle(B1,B4);
1672
+ B7;
1673
+ }
1674
+
1675
+
1676
+ ///////////////////////////////////////////////////////////////////////////////
1677
+ proc concatIntmat(intmat A, intmat B)
1678
+ {
1679
+ if (nrows(A) != nrows(B))
1680
+ {
1681
+ nrows(A);
1682
+ nrows(B);
1683
+ ERROR("A and B do not have the same number of rows");
1684
+ }
1685
+ // return the concatenated matrix [A; B]
1686
+ int i,j;
1687
+ intmat AB[nrows(A)][ncols(A)+ncols(B)];
1688
+
1689
+ for (i = 1; i <= nrows(AB); i++)
1690
+ {
1691
+ for (j = 1; j <= ncols(AB); j++)
1692
+ {
1693
+ if(j <= ncols(A))
1694
+ {
1695
+ AB[i,j] = A[i,j];
1696
+ }
1697
+ else
1698
+ {
1699
+ AB[i,j] = B[i,j-ncols(A)];
1700
+ }
1701
+ }
1702
+ }
1703
+ return(AB)
1704
+ }
1705
+
1706
+
1707
+ ///////////////////////////////////////////////////////////////////////////////
1708
+ proc shift(multigradedcomplex A, int i)
1709
+ "USAGE: computes A[i], the shifted multigraded complex
1710
+ RETURN: shifted multigradedcomplex
1711
+ "
1712
+ {
1713
+ A.shift = A.shift + i;
1714
+ if ( i%2 == 0)
1715
+ {
1716
+ return(A);
1717
+ }
1718
+ else
1719
+ {
1720
+ for (int k = 1; k<= size(A.differentials); k++)
1721
+ {
1722
+ A.differentials[k] = setModuleGrading(module(-A.differentials[k]), getModuleGrading(A.differentials[k]));
1723
+ }
1724
+ return(A);
1725
+ }
1726
+ }
1727
+
1728
+
1729
+ ///////////////////////////////////////////////////////////////////////////////
1730
+ //
1731
+ // static procedures
1732
+ //
1733
+ ///////////////////////////////////////////////////////////////////////////////
1734
+
1735
+
1736
+ ///////////////////////////////////////////////////////////////////////////////
1737
+ static proc jacobM(matrix M) //kopiert aus sheafcoh.lib
1738
+ {
1739
+ // computes the jacobian matrix of the input matrix
1740
+ int n=nvars(basering);
1741
+ matrix B=transpose(diff(M,var(1)));
1742
+ int i;
1743
+ for(i=2;i<=n;i++)
1744
+ {
1745
+ B=concat(B,transpose(diff(M,var(i))));
1746
+ }
1747
+ return(transpose(B));
1748
+ }
1749
+
1750
+
1751
+ //////////////////////////////////////////////////////////////////////////
1752
+ static proc countMultiDegree(intvec c, intmat multiDegrees)
1753
+ "USAGE: counts how often a multidegree occurs in the matrix multiDegrees
1754
+ ASSUME: nrows(multiDegrees) == length(c);
1755
+ RETURN: cohomologyMatrix in ZZ[h] (klappt aber leider irgendwie nicht, wegen Ringwechsel in Funktion)
1756
+ "
1757
+ {
1758
+ // iterate through the columns of matrix multiDegrees and count how often c arises as a column
1759
+ int numc;
1760
+ int i;
1761
+ for (i=1;i<=ncols(multiDegrees);i++)
1762
+ {
1763
+ if(submat(multiDegrees,1..nrows(multiDegrees),i) == c)
1764
+ {
1765
+ numc= numc +1;
1766
+ }
1767
+ }
1768
+ return(numc);
1769
+ }
1770
+
1771
+
1772
+ ///////////////////////////////////////////////////////////////////////////////
1773
+ static proc subtractIntMat(intmat A, int d)
1774
+ {
1775
+ //uses subtract to subtract d from all the columns
1776
+ matrix result;
1777
+ intvec c;
1778
+
1779
+ for (int i = 1; i<= ncols(A);i++)
1780
+ {
1781
+ c = A[1,i],A[2,i];
1782
+ result = concat(result, matrix(subtract(c,d)));
1783
+ }
1784
+
1785
+ result = submat(result,1..2,2..ncols(result));
1786
+
1787
+ return(result);
1788
+ }
1789
+
1790
+
1791
+ ///////////////////////////////////////////////////////////////////////////////
1792
+ static proc subtract(intvec c, int d)
1793
+ {
1794
+ //if size(c) != 2 then error
1795
+ // assume d >0
1796
+ //subtract in total d from the intvec c (go through all possibilities)
1797
+ // there are in total d+1 possibilities
1798
+ intmat result[2][d+1];
1799
+ int i = d;
1800
+ int j = 0;
1801
+ for (int k = 1; k<=d+1;k++)
1802
+ {
1803
+ result[1,k] = c[1]-i;
1804
+ result[2,k] = c[2]-j;
1805
+ i = i-1;
1806
+ j = j+1;
1807
+ }
1808
+ return(result)
1809
+ }
1810
+
1811
+
1812
+ ///////////////////////////////////////////////////////////////////////////////
1813
+ static proc matrixWithSpecificEntries(int a, int b, intvec c)
1814
+ {
1815
+ // ith row has entries c[i]
1816
+ int i,j;
1817
+ intmat A[a][b];
1818
+ for (i =1; i<= a; i++)
1819
+ {
1820
+ for (j =1; j<= b; j++)
1821
+ {
1822
+ A[i,j] = c[i];
1823
+ }
1824
+ }
1825
+ return(A);
1826
+ }
1827
+
1828
+
1829
+ ///////////////////////////////////////////////////////////////////////////////
1830
+ static proc deleteZerosReso(list L)
1831
+ "USAGE: deletes all the zero entries in the list which represents a complex
1832
+ RETURN: list
1833
+ NOTE: the shift of homological degree stored in the first entry of L has to be adjusted
1834
+ "
1835
+ {
1836
+ int i=2;
1837
+ int flag = 1;
1838
+ while (flag)
1839
+ {
1840
+
1841
+ if (size(L) <= 1)
1842
+ {
1843
+ // nothing more to do, list is just zero and ist just an empty complex
1844
+ flag = 0;
1845
+ }
1846
+
1847
+ else
1848
+ {
1849
+ // check whether entry is the zero module (size(L[i]) == 0)
1850
+ // or if the entry is the zero matrix (L[i] == 0)
1851
+ if (L[i] == 0 || size(L[i]) == 0)
1852
+ {
1853
+ // delete list entry
1854
+ L = delete(L,2);
1855
+ L[1] = L[1]-1;
1856
+ }
1857
+ else
1858
+ {
1859
+ flag = 0;
1860
+ }
1861
+ }
1862
+ }
1863
+
1864
+ int n = size(L);
1865
+ for (i = n; i >= 2; i--)
1866
+ {
1867
+ if (L[i] == 0 || size(L[i]) == 0)
1868
+ {
1869
+ L = delete(L,i);
1870
+ }
1871
+ }
1872
+ return(L);
1873
+ }
1874
+
1875
+
1876
+ ///////////////////////////////////////////////////////////////////////////////
1877
+ static proc deleteColumnsIntmat(intmat A, intvec c)
1878
+ "USAGE: delete the columns of A not corresponding to the indices in c[2],..., c[size(c)]
1879
+ ASSUME: first entry of c is zero and will not be considered, entries in c are in the right range
1880
+ RETURN: intmat with deleted columns
1881
+ "
1882
+ {
1883
+ if (size(c) == 1)
1884
+ {
1885
+ intmat C[1][1] =0;
1886
+ return(C);
1887
+ }
1888
+ intvec d = c[2..size(c)];
1889
+ intmat K[nrows(A)][size(c)-1] = A[1..nrows(A),d];
1890
+ return(K);
1891
+ }
1892
+
1893
+
1894
+ ///////////////////////////////////////////////////////////////////////////////
1895
+ static proc deleteRows(matrix A, intvec c)
1896
+ "USAGE: delete the rows of A not corresponding to the indices in c[2],..., c[size(c)]
1897
+ ASSUME: first entry of c is zero and will not be considered, entries in c are in the right range
1898
+ RETURN: matrix with deleted rows
1899
+ NOTE:
1900
+ EXAMPLE:
1901
+ KEYWORDS:
1902
+ "
1903
+ {
1904
+ matrix B = deleteColumns(transpose(A),c);
1905
+ return(transpose(B));
1906
+ }
1907
+
1908
+
1909
+ ///////////////////////////////////////////////////////////////////////////////
1910
+ static proc deleteColumns(matrix A, intvec c)
1911
+ "USAGE: delete the columns of A not in c[2],..., c[size(c)]
1912
+ ASSUME: first entry of c is zero and will not be considered, entries in c are in the right range
1913
+ RETURN: matrix with deleted columns
1914
+ NOTE:
1915
+ EXAMPLE:
1916
+ KEYWORDS:
1917
+ "
1918
+ {
1919
+ if (size(c) == 1)
1920
+ {
1921
+ return(matrix(0));
1922
+ }
1923
+
1924
+ intvec d = c[2..size(c)];
1925
+ A = submat(A,1..nrows(A),d);
1926
+ return(A);
1927
+ }
1928
+
1929
+
1930
+ ///////////////////////////////////////////////////////////////////////////////
1931
+ static proc goodColumns(intmat A, intvec c, intvec I, intvec J, intvec K)
1932
+ "USAGE: compute columns of A which have entries in the desired range
1933
+ ASSUME: I,J,K are disjoint subsets of {1,...,t},
1934
+ RETURN: intvec c which is just 0 if no column is in the desired range, otherwise first entry is
1935
+ zero and the other entries are the indices of columns in the desired range
1936
+ NOTE:
1937
+ EXAMPLE:
1938
+ KEYWORDS:
1939
+ "
1940
+ {
1941
+ // need to filter which columns satisfy a_i < c_i for i in I
1942
+ // a_i = c_i for i in J, a_i >= c_i for i in K
1943
+ intvec d;
1944
+ for (int i = 1; i <= ncols(A); i++)
1945
+ {
1946
+ if (isGood(intvec(A[1..nrows(A), i]),c, I,J,K))
1947
+ {
1948
+ d = d, i;
1949
+ }
1950
+ }
1951
+ return(d);
1952
+ }
1953
+
1954
+
1955
+ ///////////////////////////////////////////////////////////////////////////////
1956
+ static proc isGood(intvec a, intvec c, intvec I, intvec J, intvec K)
1957
+ {
1958
+ // return 1 if the vector a satisfies a_i < c_i for i in I
1959
+ // a_i = c_i for i in J, a_i >= c_i for i in K
1960
+ int i;
1961
+
1962
+ for (i = 2; i <= size(I); i++)
1963
+ {
1964
+ if (a[I[i]] >= c[I[i]])
1965
+ {
1966
+ return(0);
1967
+ }
1968
+ }
1969
+
1970
+ for (i = 2; i <= size(J); i++)
1971
+ {
1972
+ if (a[J[i]] != c[J[i]])
1973
+ {
1974
+ return(0);
1975
+ }
1976
+ }
1977
+
1978
+ for (i = 2; i <= size(K); i++)
1979
+ {
1980
+ if (a[K[i]] < c[K[i]])
1981
+ {
1982
+ return(0);
1983
+ }
1984
+ }
1985
+ return(1);
1986
+ }
1987
+
1988
+
1989
+ ///////////////////////////////////////////////////////////////////////////////
1990
+ static proc isDisjoint(intvec I, intvec J, intvec K)
1991
+ "USAGE: test whether the entries of I,J,K are disjoint (not consider 0)
1992
+ NOTE: total dumm und aufwaendig...
1993
+ RETURN: 1 or 0
1994
+ "
1995
+ {
1996
+ int i,j,k;
1997
+ for (i = 1; i <= size(I); i++)
1998
+ {
1999
+ for (j = 1; j <= size(J); j++)
2000
+ {
2001
+ for (k = 1; k <= size(K); k++)
2002
+ {
2003
+ if (I[i] != 0 && (I[i] == J[j] || I[i] == K[k]))
2004
+ {
2005
+ return(0);
2006
+ }
2007
+
2008
+ if (J[j] != 0 && J[j] == K[k])
2009
+ {
2010
+ return(0);
2011
+ }
2012
+ }
2013
+ }
2014
+ }
2015
+ return(1);
2016
+ }
2017
+
2018
+
2019
+ ///////////////////////////////////////////////////////////////////////////////
2020
+ static proc getColumnIntmat(intmat A, int i)
2021
+ "USAGE: returns intvec corresponding to ith column if the matrix
2022
+ ASSUME:
2023
+ RETURN: intvec
2024
+ "
2025
+ {
2026
+ intvec b = A[1,i];
2027
+ for (int k = 2; k<= nrows(A); k++)
2028
+ {
2029
+ b = b, A[k,i];
2030
+ }
2031
+ return(b);
2032
+ }
2033
+
2034
+
2035
+ ///////////////////////////////////////////////////////////////////////////////
2036
+ static proc getTargetGrading(matrix A, intmat sourceGrading)
2037
+ "USAGE: computes the shifts in the target of A when we regard A as a homogeneous map
2038
+ ASSUME: A a (homogeneous) matrix, souceGrading has represents the twists in the source when m is regarded as a mapping,
2039
+ assume we are over a Z^2-graded ring
2040
+ RETURN: intmat, the shifts in the target
2041
+ NOTE:
2042
+ EXAMPLE: example getTargetGrading
2043
+ KEYWORDS:
2044
+ "
2045
+ {
2046
+ // consider the map F1 = \oplus S(-d_j) \to F0 = \oplus S(-c_i)
2047
+ int cols = ncols(A);
2048
+ int rows = nrows(A);
2049
+ intmat targetGrading[nrows(sourceGrading)][rows];
2050
+
2051
+ // TODO : Check if sourceGrading has the right size
2052
+
2053
+ int i,j;
2054
+ int nonzeroentry;
2055
+ for (i = 1; i<= rows; i++)
2056
+ {
2057
+ nonzeroentry = 1;
2058
+ while(nonzeroentry <= cols )
2059
+ {
2060
+
2061
+ if (A[i,nonzeroentry]!= 0)
2062
+ {
2063
+ // apply formula and compute c_i
2064
+
2065
+ for (j = 1; j<= nrows(sourceGrading); j++)
2066
+ {
2067
+ targetGrading[j,i] = sourceGrading[j,nonzeroentry] - multiDeg(poly(A[i,nonzeroentry]))[j];
2068
+ }
2069
+
2070
+ // do the following to stop the while loop
2071
+ break;
2072
+ }
2073
+ nonzeroentry = nonzeroentry + 1;
2074
+ }
2075
+ if (nonzeroentry == (cols + 1))
2076
+ {
2077
+ ERROR("Matrix has a zero row.")
2078
+ }
2079
+ }
2080
+
2081
+ return(targetGrading);
2082
+ }
2083
+ example
2084
+ {"EXAMPLE:";
2085
+ echo = 2;
2086
+ intvec c = 1,2;
2087
+ def (S,E) = productOfProjectiveSpaces(c);
2088
+ setring(S);
2089
+ matrix m[4][2] = x(0)(0), x(1)(0),x(0)(1),0,0,x(1)(1), 0,x(1)(2);
2090
+ print(m);
2091
+ intmat sourceGrading[2][2] = 1,0,0,1;
2092
+ getTargetGrading(m,sourceGrading);
2093
+ }
2094
+
2095
+
2096
+ ///////////////////////////////////////////////////////////////////////////////
2097
+ static proc getSourceGrading(matrix A, intmat targetGrading)
2098
+ "USAGE: computes the shifts in the target of A when we regard A as a homogeneous map
2099
+ ASSUME: A a (homogeneous) matrix, souceGrading has represents the twists in the source when m is regarded as a mapping,
2100
+ assume we are over a Z^2-graded ring
2101
+ RETURN: intmat, the shifts in the target
2102
+ EXAMPLE: example getSourceGrading
2103
+ "
2104
+ {
2105
+ // TODO: Eine der beiden Funktionen ist eigentlich unnoetig, kann man auch auf die andere zurueckfuehren
2106
+
2107
+ // consider the map F1 = \oplus S(-d_j) \to F0 = \oplus S(-c_i)
2108
+ int cols = ncols(A);
2109
+ int rows = nrows(A);
2110
+ intmat sourceGrading[2][cols];
2111
+
2112
+ // TODO : Check if targetGrading has the right size
2113
+
2114
+ int i;
2115
+ int nonzeroentry;
2116
+ for (i = 1; i<= cols; i++)
2117
+ {
2118
+ nonzeroentry = 1;
2119
+ while(nonzeroentry <= rows )
2120
+ {
2121
+
2122
+ if (A[nonzeroentry,i]!= 0)
2123
+ {
2124
+ // apply formula and compute c_i
2125
+ sourceGrading[1,i] = targetGrading[1,nonzeroentry] + multiDeg(poly(A[nonzeroentry,i]))[1];
2126
+ sourceGrading[2,i] = targetGrading[2,nonzeroentry] + multiDeg(poly(A[nonzeroentry,i]))[2];
2127
+
2128
+ // in this case stop the while loop
2129
+ break;
2130
+ }
2131
+ nonzeroentry = nonzeroentry + 1;
2132
+ }
2133
+ if (nonzeroentry == (rows + 1))
2134
+ {
2135
+ ERROR("Matrix has a zero column.")
2136
+ }
2137
+ }
2138
+ return(sourceGrading);
2139
+ }
2140
+ example
2141
+ {"EXAMPLE:";
2142
+ echo = 2;
2143
+ intvec c = 1,2;
2144
+ def (S,E) = productOfProjectiveSpaces(c);
2145
+ setring(S);
2146
+ matrix m[4][2] = x(0)(0), x(1)(0),x(0)(1),0,0,x(1)(1), 0,x(1)(2);
2147
+ print(m);
2148
+ intmat targetGrading[2][4] = 0,0,0,0,0,0,0,0;
2149
+ getSourceGrading(m,targetGrading);
2150
+ }
2151
+
2152
+
2153
+ ///////////////////////////////////////////////////////////////////////////////
2154
+ static proc isLEQ(intvec c, intvec d)
2155
+ "USAGE: checks whether the intvec c is lower or equal to the intvec d (componentwise)
2156
+ RETURN: int 1 if c <= d, otherwise return 0
2157
+ EXAMPLE: example isLEQ
2158
+ "
2159
+ {
2160
+ if (size(c) != size(d))
2161
+ {
2162
+ ERROR("The input vectors need to have the same size.")
2163
+ }
2164
+
2165
+ for (int i = 1; i<= size(c); i++)
2166
+ {
2167
+ if (c[i] > d[i])
2168
+ {
2169
+ return(0);
2170
+ }
2171
+ }
2172
+ return(1);
2173
+ }
2174
+ example
2175
+ {"EXAMPLE:";
2176
+ echo = 2;
2177
+ ring R = 0,x,dp;
2178
+ intvec c1 = 3,4;
2179
+ intvec c2 = 5,5;
2180
+ intvec c3 = 6,7,8;
2181
+ isLEQ(c1,c2);
2182
+ isLEQ(c2,c1);
2183
+ isLEQ(c1,c1);
2184
+ isLEQ(c1,c3);
2185
+ }
2186
+
2187
+
2188
+ ///////////////////////////////////////////////////////////////////////////////
2189
+ static proc isSmaller(intvec c, intvec d)
2190
+ "USAGE: isSmaller(c,d); c intvec, d intvec
2191
+ ASSUME: c and d are integer vectors
2192
+ RETURN: int 1 if c < d, otherwise return 0
2193
+ EXAMPLE: example isLEQ
2194
+ "
2195
+ {
2196
+ if (size(c) != size(d))
2197
+ {
2198
+ ERROR("The input vectors need to have the same size.")
2199
+ }
2200
+
2201
+ for (int i = 1; i<= size(c); i++)
2202
+ {
2203
+ if (c[i] >= d[i])
2204
+ {
2205
+ return(0);
2206
+ }
2207
+ }
2208
+ return(1);
2209
+ }
2210
+ example
2211
+ {"EXAMPLE:";
2212
+ echo = 2;
2213
+ ring R = 0,x,dp;
2214
+ intvec c1 = 3,4;
2215
+ intvec c2 = 5,5;
2216
+ intvec c3 = 6,7,8;
2217
+ isLEQ(c1,c2);
2218
+ isLEQ(c2,c1);
2219
+ isLEQ(c1,c1);
2220
+ isLEQ(c1,c3);
2221
+ }
2222
+
2223
+
2224
+ ///////////////////////////////////////////////////////////////////////////////
2225
+ static proc vectorsLEQ(intvec c)
2226
+ "USAGE: compute all vectors >= 0 and <= c
2227
+ ASSUME: c has nonnegative entries
2228
+ RETURN: intmat A where the columns represent all the vectors which are <= c, >= 0
2229
+ EXAMPLE: example vectorsLEQ
2230
+ "
2231
+ {
2232
+ int i,j,k,numcolumns;
2233
+ matrix A[size(c)][1];
2234
+ matrix v[size(c)][1];
2235
+ for (i = 1; i<= size(c); i++)
2236
+ {
2237
+ numcolumns = ncols(A);
2238
+ for(j = 1; j<= numcolumns; j++)
2239
+ {
2240
+ for (k = 1; k <= c[i]; k++)
2241
+ {
2242
+ v = v-v;
2243
+ v[i,1] = k;
2244
+ A = concat(A,v+submat(A,1..nrows(A),j));
2245
+ }
2246
+ }
2247
+ }
2248
+
2249
+ return(A);
2250
+ //lowerbounds = concat(lowerbounds, matrix(getModuleGrading(T[i])));
2251
+ }
2252
+ example
2253
+ {"EXAMPLE:";
2254
+ echo = 2;
2255
+ ring R = 0,x,dp;
2256
+ intvec c = 1,2,3;
2257
+ matrix A = vectorsLEQ(c);
2258
+ print(A);
2259
+ }
2260
+
2261
+
2262
+ ///////////////////////////////////////////////////////////////////////////////
2263
+ static proc inBeilinsonWindow(intmat D, intvec n)
2264
+ "USAGE: compute the indices of all multidegrees in D in the range 0 \leq a \leq n
2265
+ RETURN: intvec c where the entries represent the indices of multidegrees in the range,
2266
+ the first entry is always 0, outputs the zero vector if all multidegrees are not in desired range.
2267
+ EXAMPLE: example inBeilinsonWindow
2268
+ "
2269
+ {
2270
+ if (nrows(D) != size(n))
2271
+ {
2272
+ ERROR("The number of columns and size of n have to be equal.")
2273
+ }
2274
+
2275
+ intvec c;
2276
+ intvec zero = n-n;
2277
+ int i,j;
2278
+ int rows = nrows(D);
2279
+ intvec dcol = n;
2280
+ for (i = 1; i <= ncols(D); i++)
2281
+ {
2282
+ for(j = 1; j<= rows; j++)
2283
+ {
2284
+ dcol[j] = D[j,i];
2285
+ }
2286
+ if(isLEQ(dcol,zero) && isLEQ(-n,dcol))
2287
+ {
2288
+ c = c,i;
2289
+ }
2290
+ }
2291
+ return(c);
2292
+ }
2293
+ example
2294
+ {"EXAMPLE:";
2295
+ echo = 2;
2296
+ ring R = 0,x,dp;
2297
+ intvec n = 1,2,3;
2298
+ intmat D[3][5] = 1,1,0,6,1,2,3,1,0,0,3,2,4,5,0;
2299
+ print(D);
2300
+ intvec c = inBeilinsonWindow(D,n);
2301
+ print(c);
2302
+ }
2303
+
2304
+
2305
+ ///////////////////////////////////////////////////////////////////////////////
2306
+ static proc deleteZerosMultigradedComplex(multigradedcomplex T)
2307
+ "USAGE: delete superfluous zeros in a multigraded complex
2308
+ RETURN: multigradedcomplex with deleted zeros
2309
+ "
2310
+ {
2311
+ int nmods = size(T.modules);
2312
+ int nonzeros;
2313
+ int flag = 1;
2314
+ int i = nmods-1;
2315
+ while(flag && i>0)
2316
+ {
2317
+ if (size(T.modules[i]) == 0 && size(T.modules[i+1]) == 0)
2318
+ {
2319
+ T.modules = delete(T.modules,i+1);
2320
+ T.differentials = delete(T.differentials,i);
2321
+ }
2322
+ else
2323
+ {
2324
+ if (size(T.modules[i]) != 0 && size(T.modules[i+1]) == 0)
2325
+ {
2326
+ T.differentials[i] = module(matrix(0));
2327
+ flag = 0;
2328
+ }
2329
+ else
2330
+ {
2331
+ flag = 0;
2332
+ }
2333
+ }
2334
+ i = i-1;
2335
+ }
2336
+
2337
+ flag = 1;
2338
+ while(flag && (size(T.modules) >= 2))
2339
+ {
2340
+ if (size(T.modules[1]) == 0 && size(T.modules[2]) == 0)
2341
+ {
2342
+ T.modules = delete(T.modules,1);
2343
+ T.differentials = delete(T.differentials,1);
2344
+ T.shift = T.shift -1;
2345
+ }
2346
+ else
2347
+ {
2348
+ if (size(T.modules[1]) == 0 && size(T.modules[2]) != 0)
2349
+ {
2350
+ T.differentials[1] = module(matrix(0));
2351
+ flag = 0;
2352
+ }
2353
+ else
2354
+ {
2355
+ flag = 0;
2356
+ }
2357
+ }
2358
+ }
2359
+
2360
+ if (size(T.modules) == 0)
2361
+ {
2362
+ T.modules = list();
2363
+ T.differentials = list();
2364
+ T.shift = 0;
2365
+ }
2366
+ return(T);
2367
+ }
2368
+
2369
+
2370
+ ///////////////////////////////////////////////////////////////////////////////
2371
+ static proc getDimensionVector(intmat variableWeights)
2372
+ "USAGE: compute the indices of all multidegrees in D in the range 0 \leq a \leq n
2373
+ RETURN: intvec n
2374
+ "
2375
+ {
2376
+ int i;
2377
+ intvec n = 1..nrows(variableWeights);
2378
+ intvec b;
2379
+ int j = 1;
2380
+ for (i=1; i<= nrows(variableWeights); i++)
2381
+ {
2382
+ b = intvec(variableWeights[1..nrows(variableWeights), j]);
2383
+ n[i] = countMultiDegree(b,variableWeights);
2384
+ j = j + n[i];
2385
+ n[i] = n[i]-1;
2386
+ }
2387
+ return(n);
2388
+ }
2389
+
2390
+
2391
+ ///////////////////////////////////////////////////////////////////////////////
2392
+ static proc gradingAndVectorCompatible(module M, intvec c)
2393
+ {
2394
+ if(nrows(getModuleGrading(M)) == size(c))
2395
+ {
2396
+ return(1);
2397
+ }
2398
+ else
2399
+ {
2400
+ return(0);
2401
+ }
2402
+ }
2403
+
2404
+
2405
+ ///////////////////////////////////////////////////////////////////////////////
2406
+ static proc deleteFirstEntry(multigradedcomplex tate)
2407
+ {
2408
+ tate.modules = delete(tate.modules,1);
2409
+ tate.differentials = delete(tate.differentials,1);
2410
+ return(tate);
2411
+ }
2412
+