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 ()