next | previous | forward | backward | up | top | index | toc | Macaulay2 web site
VirtualResolutions :: isVirtual

isVirtual -- checks if a chain complex is a virtual resolution of a given module



Given an ideal I, irrelevant ideal irr, and a chain complex C, isVirtual returns true if C is a virtual resolution of I. If not, it returns false.

This is done by checking that the saturations of I and of the annihilator of H0(C) agree, then checking that the higher homology groups of C are supported on the irrelevant ideal.

If debugLevel is larger than zero, the homological degree where isVirtual fails is printed.

i1 : R = ZZ/101[s,t];
i2 : isVirtual(ideal(s),ideal(s,t),res ideal(t))

o2 = false

Continuing our running example of three points ([1:1],[1:4]), ([1:2],[1:5]), and ([1:3],[1:6]) in 1 ×ℙ1, we can check that the virtual complex we compute below and in other places is in fact virtual.

i3 : Y = toricProjectiveSpace(1)**toricProjectiveSpace(1);
i4 : S = ring Y;
i5 : B = ideal Y;

o5 : Ideal of S
i6 : J = saturate(intersect(
        ideal(x_1 - x_0, x_3 - 4*x_2),
        ideal(x_1 - 2*x_0, x_3 - 5*x_2),
        ideal(x_1 - 3*x_0, x_3 - 6*x_2)), B);

o6 : Ideal of S
i7 : minres = res J;
i8 : vres = virtualOfPair(J,{{3,1}});
i9 : isVirtual(J,B,vres)

o9 = true

Finally, we can also use the Determinantal strategy, which implements Theorem 1.3 of arXiv:1904.05994.

i10 : isVirtual(J,B,vres,Strategy=>Determinantal)

o10 = true


For a module, isVirtual may return true for a proposed virtual resolution despite the chain complex not being a virtual resolution; this occurs when the annihilator of the module and the annihilator of H0(C) saturate to the same ideal.

Ways to use isVirtual :