let rec deriv_poly = function
  p -> if is_null_poly (p)
         then null_poly ()
         else
           let
             (a, q) = inv_cons_poly (p)
           in
             add_poly (q, x_times (deriv_poly (q)))