# isVirtual -- checks whether a chain complex is a virtual resolution

## Synopsis

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

## Description

Given the irrelevant ideal irr of a NormalToricVariety and a chain complex C, isVirtual returns true if C is a virtual resolution of some module. If not, it returns false. This is done by checking that the higher homology groups of Care 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,t),res ideal(t)) o2 = true

Continuing our running example of three points $([1:1],[1:4])$, $([1:2],[1:5])$, and $([1:3],[1:6])$ in $\PP^1 \times \PP^1$, we can check whether 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(B,vres) o9 = true

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

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

## Ways to use isVirtual :

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

## For the programmer

The object isVirtual is .