let rec add_poly = function
  p1, p2 -> if is_null_poly (p1)
              then p2
              else
                if is_null_poly (p2)
                  then p1
                  else let
                         (a1, q1) = inv_cons_poly (p1)
                         and
                         (a2, q2) = inv_cons_poly (p2)
                       in
                         let
                           q = add_poly (q1, q2)
                           and
                           a = add_rat (a1, a2)
                         in
                           if not (eq_rat (a, cons_rat ("0""1")) & is_null_poly (q))
                             then cons_poly (a, q)
                             else null_poly ()