Nonsmooth analysis