# Special cubic fourfolds

Cubic fourfolds are degree-3 smooth hypersurfaces in $\mathbf P^5$. They can be constructed using complete_intersection.

julia> Y = complete_intersection(proj(5), 3)
AbsVariety of dim 4

julia> basis(Y)
5-element Vector{Vector{IntersectionTheory.ChRingElem}}:
[1]
[h]
[h^2]
[h^3]
[h^4]

We see that a generic $Y$ only contains classes that are complete intersections.

Special cubic fourfolds are those that contain a surface not homologous to a complete intersection, i.e. they have extra algebraic classes. We can construct a surface $S$ as follows.

julia> S, (h, c1, c2) = variety(2, ["h", "c1", "c2"], [1, 1, 2])
(AbsVariety of dim 2, IntersectionTheory.ChRingElem[h, c1, c2])

julia> S.T = bundle(S, 2, 1 + c1 + c2)
AbsBundle of rank 2 on AbsVariety of dim 2

julia> trim!(S.ring);

julia> basis(S)
ERROR: BoundsError: attempt to access 3-element Vector{Vector{IntersectionTheory.ChRingElem}} at index [0]

Here we first built a generic 2-dimensional variety with some classes, then we specified its tangent bundle. The step trim! is to get rid of classes that have codimension larger than 2.

Now we build the inclusion.

julia> i = hom(S, Y, [h])
AbsVarietyHom from AbsVariety of dim 2 to AbsVariety of dim 4

The self-intersection number of $S$ in $Y$ is equal to the top Chern class of the normal bundle, while this latter can be accessed as the negative of the relative tangent bundle of $i$.

julia> ctop(-i.T)
6*h^2 - 3*h*c1 + c1^2 - c2

Since we saw that there is no algebraic class in $Y$ for the surface $S$, the classes on $S$ cannot be pushforward to $Y$.

julia> pushforward(i, S(1))
ERROR: UndefRefError: access to undefined reference

To overcome this we may use the argument inclusion=true when building the inclusion. The returned inclusion will then have its codomain a modified version of $Y$, with extra classes added.

julia> j = hom(S, Y, [h], inclusion=true, symbol="s")
AbsVarietyHom from AbsVariety of dim 2 to AbsVariety of dim 4

julia> Y₁ = j.codomain
AbsVariety of dim 4

julia> basis(Y₁)
ERROR: BoundsError: attempt to access 5-element Vector{Vector{IntersectionTheory.ChRingElem}} at index [0]

Now we can pushforward classes on $S$.

julia> pushforward(j, S(1))
s

julia> pushforward(j, ctop(-j.T))
s^2

## Cubic fourfolds containing a degree-5 del Pezzo surface

We compute with a more explicit surface. A degree-5 del Pezzo surface can be constructed as the projective plane blown up at 4 points.

julia> S = blowup_points(4, proj(2))
AbsVariety of dim 2

julia> basis(S)
3-element Vector{Vector{IntersectionTheory.ChRingElem}}:
[1]
[h, e₁, e₂, e₃, e₄]
[h^2]

It can be embedded in a special cubic fourfold $Y_1$ via the anti-canonical linear system.

julia> K = canonical_class(S)
e₄ + e₃ + e₂ + e₁ - 3*h

julia> chi(OO(S, -K))
6

julia> i = hom(S, Y, [-K], inclusion=true, symbol="s")
AbsVarietyHom from AbsVariety of dim 2 to AbsVariety of dim 4

julia> Y₁ = i.codomain
AbsVariety of dim 4

The cubic fourfold is rational in this case: a rational map to $\mathbf P^4$ can be given by the linear system of quadric hypersurfaces containing $S$. Numerically, we compute the blowup of $Y_1$ along $S$ and study the divisor $2h-e$.

julia> Bl, E = blowup(i)
(AbsVariety of dim 4, AbsVariety of dim 3)

julia> h = pullback(Bl → Y₁, Y₁.O1)
h

julia> e = pushforward(E → Bl, E(1))
e

julia> integral((2h - e)^4)
1

julia> chi(OO(Bl, 2h - e))
5