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

Synopsis

• Usage:
isVirtual(I,irr,C)
isVirtual(I,X,C)
isVirtual(M,irr,C)
isVirtual(M,X,C)
• Inputs:
• I, an ideal, ideal that the virtual resolution should resolve
• irr, an ideal, irrelevant ideal of the ring
• X, , normal toric variety
• C, , chain complex we want to check is a virtual resolution
• M, , module that the virtual resolution should resolve
• Optional inputs:
• Strategy => ..., -- changes strategy from computing homology to computing minors of boundary maps
• Outputs:
• , true if C is a virtual resolution of I false if not

Description

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```

Caveat

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 :

• isVirtual(Ideal,Ideal,ChainComplex)
• isVirtual(Ideal,NormalToricVariety,ChainComplex)
• isVirtual(Module,Ideal,ChainComplex)
• isVirtual(Module,NormalToricVariety,ChainComplex)