- Usage:
`makeSmooth X`

- Function: makeSmooth
- Inputs:
`X`, a normal toric variety

- Optional inputs:
`Strategy =>`an integer, default value 0, either`0`or`1`

- Outputs:
- a normal toric variety, that is smooth and birational to
`X`

- a normal toric variety, that is smooth and birational to

Every normal toric variety has a resolution of singularities given by another normal toric variety. Given a normal toric variety *X* this method makes a new smooth toric variety *Y* which has a proper birational map to *X*. The normal toric variety *Y* is obtained from *X* by repeatedly blowing up appropriate torus orbit closures (if necessary the makeSimplicial method is also used with the specified strategy). A minimal number of blow-ups are used.

As a simple example, we can resolve a simplicial affine singularity.

i1 : U = normalToricVariety ({{4,-1},{0,1}}, {{0,1}}); |

i2 : assert not isSmooth U |

i3 : V = makeSmooth U; |

i4 : assert isSmooth V |

i5 : rays V, max V o5 = ({{4, -1}, {0, 1}, {1, 0}}, {{0, 2}, {1, 2}}) o5 : Sequence |

i6 : toList (set rays V - set rays U) o6 = {{1, 0}} o6 : List |

There is one additional rays, so only one toricBlowup was needed.

To resolve the singularities of this simplicial projective fourfold, we need eleven toricBlowups.

i7 : W = weightedProjectiveSpace {1,2,3,4,5}; |

i8 : assert (dim W === 4) |

i9 : assert (isSimplicial W and not isSmooth W) |

i10 : W' = makeSmooth W; |

i11 : assert isSmooth W' |

i12 : # (set rays W' - set rays W) o12 = 11 |

If the initial toric variety is smooth, then this method simply returns it.

i13 : AA1 = affineSpace 1; |

i14 : assert (AA1 === makeSmooth AA1) |

i15 : PP2 = toricProjectiveSpace 2; |

i16 : assert (PP2 === makeSmooth PP2) |

In the next example, we resolve the singularities of a non-simplicial projective threefold.

i17 : X = normalToricVariety (id_(ZZ^3) | -id_(ZZ^3)); |

i18 : assert (not isSimplicial X and not isSmooth X) |

i19 : X' = makeSmooth X; |

i20 : assert isSmooth X' |

i21 : # (set rays X' - set rays X) o21 = 18 |

We also demonstrate this method on a complete simplicial non-projective threefold.

i22 : Z = normalToricVariety ({{-1,-1,1},{3,-1,1},{0,0,1},{1,0,1},{0,1,1},{-1,3,1},{0,0,-1}}, {{0,1,3},{0,1,6},{0,2,3},{0,2,5},{0,5,6},{1,3,4},{1,4,5},{1,5,6},{2,3,4},{2,4,5}}); |

i23 : assert (isSimplicial Z and not isSmooth Z) |

i24 : assert (isComplete Z and not isProjective Z) |

i25 : Z' = makeSmooth Z; |

i26 : assert isSmooth Z' |

i27 : # (set rays Z' - set rays Z) o27 = 11 |

We end with a degenerate example.

i28 : Y = normalToricVariety ({{1,0,0,0},{0,1,0,0},{0,0,1,0},{1,-1,1,0},{1,0,-2,0}}, {{0,1,2,3},{0,4}}); |

i29 : assert (isDegenerate Y and not isSimplicial Y and not isComplete Y) |

i30 : Y' = makeSmooth Y; |

i31 : assert isSmooth Y' |

i32 : # (set rays Y' - set rays Y) o32 = 1 |

A singular normal toric variety almost never has a unique minimal resolution. This method returns only of one of the many minimal resolutions.

- Resolution of singularities
- isSmooth(NormalToricVariety) -- whether a normal toric variety is smooth
- makeSimplicial(NormalToricVariety) -- make a birational simplicial toric variety