# localHilbertScheme -- computes a power series representation of the local Hilbert scheme

## Synopsis

• Usage:
(F,R,G,C) = localHilbertScheme(F0)
• Inputs:
• F0,
• Optional inputs:
• CacheName => ..., default value null
• CorrectionMatrix => ..., default value auto
• DefParam => ..., default value t
• DegreeBound => ..., default value 0, determines the degree limit used to compute the tangent cone of obstruction equations
• HighestOrder => ..., default value 20
• PolynomialCheck => ..., default value true
• SanityCheck => ..., default value true
• SmartLift => ..., default value true
• Verbose => ..., default value 0, control the verbosity of output
• Outputs:
• F, a list of matrices
• R, a list of matrices
• G, a list of matrices
• C, a list of matrices

## Description

F0 should be a matrix with homogeneous entries over some polynomial ring with one row.

Each element of the sequence (F,R,G,C) is a list of matrices in increasing powers of the deformation parameter specified by DefParam. Their sums satisfy the deformation equation transpose ((sum F)*(sum R))+(sum C)*(sum G)==0 up to powers of the deformation parameter equal to the length of F. Furthermore, F_0=F0, R_0=gens ker F0, C_0=T^2(0,F_0) and F_1 consists of first order perturbations corresponding to normalMatrix(0,F0). Thus, F and G represent a universal family and local analytic equations for the Hilbert scheme.

Several options are available to control the termination of the calculation. The calculation will terminate at the very latest after reaching order equal to the option HighestOrder, which has default value 20. If this order is reached, a warning message is generated. If PolynomialCheck is set to true, as is the default, then the algorithm will check if the present solution lifts to infinite order and terminate if this is the case. If SanityCheck is set to true, as is the default, then the algorithm will check that the present solution really does solve the deformation equation, and terminate with an error if this is not the case.

The option Verbose may be used to control the verbosity of the output. Its value should be an integer, with higher values corresponding to more verbose output. Default value is 0.

The option SmartLift is also available, which controls whether the algorithm spends extra time trying to find liftings which introduce no new obstructions at the next highest order. By default, this option is enabled. The option CorrectionMatrix may be used to control which liftings are considered.

After each step of lifting, the solution (F,R,G,C) to the deformation equation is cached. By default, it is stored in F0.cache#VersalDeformationResults but may stored elsewhere by setting the option CacheName to something other than null.

For example, consider a degenerate twisted cubic curve, see [PS85]:

 i1 : S=QQ[x,y,z,w]; i2 : F0=matrix {{x*z,y*z,z^2,x^3}} o2 = | xz yz z2 x3 | 1 4 o2 : Matrix S <--- S i3 : (F,R,G,C)=localHilbertScheme(F0,Verbose=>2); Calculating first order deformations and obstruction space Calculating first order relations Calculating standard expressions for obstructions Starting lifting Order 2 Order 3 Order 4 Order 5 Order 6 Order 7 Solution is polynomial

Local equations for the Hilbert scheme are thus given by

 i4 : T=ring first G; i5 : sum G o5 = | t_1t_16 | | t_9t_16 | | -t_4t_16 | | -2t_14t_16+t_15t_16 | 4 1 o5 : Matrix T <--- T

## Caveat

The output may not be the local Hilbert scheme if standard comparison theorems do not hold for the ideal generated by FO. This may be tested using checkComparisonTheorem or checkTangentSpace.

## Ways to use localHilbertScheme :

• "localHilbertScheme(Matrix)"

## For the programmer

The object localHilbertScheme is .