let cons_poly = function
  a, p 
  -> 
  match p with P (la) -> if not (eq_rat (a, cons_rat ("0""1")))
                           then P (cons_list ((a, 0),
                                   (List.map (function (x, d) -> (x, d + 1))) (la)))
                           else
                             if not (is_empty_list (la))
                               then P ((List.map (function (x, d) -> (x, d + 1))) (la))
                               else failwith ("cons_poly : at least one argument must be non-null")