# toricBlowup(List,NormalToricVariety,List) -- makes the toricBlowup of a normal toric variety along a torus orbit closure

## Synopsis

• Usage:
toricBlowup (s, X, v)
• Function: toricBlowup
• Inputs:
• s, a list, of integers indexing a proper torus orbit
• v, a list, of integers giving a vector in the relative interior of the cone corresponding to s (optional)
• Outputs:
• , obtained by blowing up X along the torus orbit indexed by s

## Description

Roughly speaking, the toricBlowup replaces a subspace of a given space with all the directions pointing out of that subspace. The metaphor is inflation of a balloon rather than an explosion. A toricBlowup is the universal way to turn a subvariety into a Cartier divisor.

The toricBlowup of a normal toric variety along a torus orbit closure is also a normal toric variety. The fan associated to the toricBlowup is star subdivision or stellar subdivision of the fan of the original toric variety. More precisely, we throw out the star of the cone corresponding to s and join a vector v lying the relative interior to the boundary of the star. When the vector v is not specified, the ray corresponding to the sum of all rays in the cone corresponding to s is used.

The simplest example is toricBlowup of the origin in the affine plane. Note that the new ray has the largest index.

 `i1 : AA2 = affineSpace 2;` ```i2 : rays AA2 o2 = {{1, 0}, {0, 1}} o2 : List``` ```i3 : max AA2 o3 = {{0, 1}} o3 : List``` `i4 : Bl0 = toricBlowup ({0,1}, AA2);` ```i5 : rays Bl0 o5 = {{1, 0}, {0, 1}, {1, 1}} o5 : List``` ```i6 : max Bl0 o6 = {{0, 2}, {1, 2}} o6 : List```

Here are a few different toricBlowups of a non-simplicial affine toric variety

 `i7 : C = normalToricVariety ({{1,0,0},{1,1,0},{1,0,1},{1,1,1}}, {{0,1,2,3}});` `i8 : assert not isSimplicial C` `i9 : Bl1 = toricBlowup ({0,1,2,3}, C);` ```i10 : rays Bl1 o10 = {{1, 0, 0}, {1, 1, 0}, {1, 0, 1}, {1, 1, 1}, {2, 1, 1}} o10 : List``` ```i11 : max Bl1 o11 = {{0, 1, 4}, {0, 2, 4}, {1, 3, 4}, {2, 3, 4}} o11 : List``` `i12 : assert isSimplicial Bl1` `i13 : Bl2 = toricBlowup ({0,1}, C);` ```i14 : rays Bl2 o14 = {{1, 0, 0}, {1, 1, 0}, {1, 0, 1}, {1, 1, 1}, {2, 1, 0}} o14 : List``` ```i15 : max Bl2 o15 = {{0, 2, 4}, {1, 3, 4}, {2, 3, 4}} o15 : List``` `i16 : assert isSimplicial Bl2` `i17 : assert (rays Bl1 =!= rays Bl2 and max Bl1 =!= max Bl2)` `i18 : Bl3 = toricBlowup ({0,1,2,3}, C, {5,3,4});` ```i19 : rays Bl3 o19 = {{1, 0, 0}, {1, 1, 0}, {1, 0, 1}, {1, 1, 1}, {5, 3, 4}} o19 : List``` ```i20 : max Bl3 o20 = {{0, 1, 4}, {0, 2, 4}, {1, 3, 4}, {2, 3, 4}} o20 : List``` `i21 : assert isSimplicial Bl3` `i22 : Bl4 = toricBlowup ({0}, C);` ```i23 : rays Bl4 o23 = {{1, 0, 0}, {1, 1, 0}, {1, 0, 1}, {1, 1, 1}} o23 : List``` ```i24 : max Bl4 o24 = {{0, 1, 3}, {0, 2, 3}} o24 : List``` `i25 : assert isSimplicial Bl4`

The third collection of examples illustrate some toricBlowups of a non-simplicial projective toric variety.

 `i26 : X = normalToricVariety (id_(ZZ^3) | (-id_(ZZ^3)));` ```i27 : rays X o27 = {{1, 1, 1}, {-1, 1, 1}, {1, -1, 1}, {-1, -1, 1}, {1, 1, -1}, {-1, 1, ----------------------------------------------------------------------- -1}, {1, -1, -1}, {-1, -1, -1}} o27 : List``` ```i28 : max X o28 = {{0, 1, 2, 3}, {0, 1, 4, 5}, {0, 2, 4, 6}, {1, 3, 5, 7}, {2, 3, 6, 7}, ----------------------------------------------------------------------- {4, 5, 6, 7}} o28 : List``` `i29 : assert (not isSimplicial X and isProjective X)` ```i30 : orbits (X,1) o30 = {{0, 1}, {0, 2}, {0, 4}, {1, 3}, {1, 5}, {2, 3}, {2, 6}, {3, 7}, {4, ----------------------------------------------------------------------- 5}, {4, 6}, {5, 7}, {6, 7}} o30 : List``` `i31 : Bl5 = toricBlowup ({0,2}, X);` `i32 : Bl6 = toricBlowup ({6,7}, Bl5);` `i33 : Bl7 = toricBlowup ({1,5}, Bl6);` ```i34 : rays Bl7 o34 = {{1, 1, 1}, {-1, 1, 1}, {1, -1, 1}, {-1, -1, 1}, {1, 1, -1}, {-1, 1, ----------------------------------------------------------------------- -1}, {1, -1, -1}, {-1, -1, -1}, {1, 0, 1}, {0, -1, -1}, {-1, 1, 0}} o34 : List``` ```i35 : max Bl7 o35 = {{0, 1, 8}, {0, 1, 10}, {0, 4, 8}, {0, 4, 10}, {1, 3, 8}, {1, 3, 10}, ----------------------------------------------------------------------- {2, 3, 8}, {2, 3, 9}, {2, 6, 8}, {2, 6, 9}, {3, 7, 9}, {3, 7, 10}, {4, ----------------------------------------------------------------------- 5, 9}, {4, 5, 10}, {4, 6, 8}, {4, 6, 9}, {5, 7, 9}, {5, 7, 10}} o35 : List``` `i36 : assert (isSimplicial Bl7 and isProjective Bl7)` `i37 : Bl8 = toricBlowup ({0}, X);` `i38 : Bl9 = toricBlowup ({7}, Bl8);` `i39 : assert (rays Bl9 === rays X)` `i40 : assert (isSimplicial Bl9 and isProjective Bl9)`

## Caveat

The method assumes that the list v corresponds to a primitive vector. In other words, the greatest common divisor of its entries is one. The method also assumes that v lies in the relative interior of the cone corresponding to s. If either of these conditions fail, then the output will not necessarily be a well-defined normal toric variety.