# dualVariety -- projective dual variety

## Synopsis

• Usage:
dualVariety I
• Inputs:
• I, an ideal, a homogeneous ideal defining a projective variety X=V(I)⊂ℙn
• Outputs:
• an ideal, the ideal of the projective dual variety X*⊂ℙn*

## Description

This can be considered a shortcut for dualize tangentialChowForm(I,dim I -1).

Note that in characteristic 0 (or sufficiently large characteristic), the reflexivity theorem implies that if I' == dualVariety I then dualVariety I' == I. Below, we verify the reflexivity theorem for the Veronese surface.

 ```i1 : V = kernel veronese(2,2) 2 2 2 o1 = ideal (x - x x , x x - x x , x x - x x , x - x x , x x - x x , x - 4 3 5 2 4 1 5 2 3 1 4 2 0 5 1 2 0 4 1 ------------------------------------------------------------------------ x x ) 0 3 o1 : Ideal of QQ[x , x , x , x , x , x ] 0 1 2 3 4 5``` ```i2 : time V' = dualVariety V -- used 0.110118 seconds 2 2 2 o2 = ideal(x x - x x x + x x + x x - 4x x x ) 2 3 1 2 4 0 4 1 5 0 3 5 o2 : Ideal of QQ[x , x , x , x , x , x ] 0 1 2 3 4 5``` ```i3 : time V == dualVariety V' -- used 0.0406255 seconds o3 = true```

In the next example, we verify that the discriminant of a generic ternary cubic form coincides with the dual variety of the 3-th Veronese embedding of the plane, which is a hypersurface of degree 12 in 9

 ```i4 : F = first genericPolynomials({3,-1,-1},ZZ/3331) 3 2 2 3 2 2 2 o4 = a x + a x x + a x x + a x + a x x + a x x x + a x x + a x x + 0 0 1 0 1 3 0 1 6 1 2 0 2 4 0 1 2 7 1 2 5 0 2 ------------------------------------------------------------------------ 2 3 a x x + a x 8 1 2 9 2 ZZ o4 : ----[a , a , a , a , a , a , a , a , a , a ][x , x , x ] 3331 0 1 2 3 4 5 6 7 8 9 0 1 2``` ```i5 : time discF = ideal discriminant F; -- used 0.0695731 seconds ZZ o5 : Ideal of ----[a , a , a , a , a , a , a , a , a , a ] 3331 0 1 2 3 4 5 6 7 8 9``` ```i6 : time Z = dualVariety(veronese(2,3,ZZ/3331),AssumeOrdinary=>true); -- used 0.833821 seconds ZZ o6 : Ideal of ----[x , x , x , x , x , x , x , x , x , x ] 3331 0 1 2 3 4 5 6 7 8 9``` ```i7 : discF == sub(Z,vars ring discF) and Z == sub(discF,vars ring Z) o7 = true```