Section Double_round_mult.
Definition round_round_mult_hyp fexp1 fexp2 :=
(forall ex ey, (fexp2 (ex + ey) <= fexp1 ex + fexp1 ey)%Z)
/\ (forall ex ey, (fexp2 (ex + ey - 1) <= fexp1 ex + fexp1 ey)%Z).
Variable rnd : R -> Z.
Context { valid_rnd : Valid_rnd rnd }.

Theorem round_round_mult :
forall (fexp1 fexp2 : Z -> Z),
round_round_mult_hyp fexp1 fexp2 ->
forall x y,
generic_format beta fexp1 x -> generic_format beta fexp1 y ->
round beta fexp1 rnd (round beta fexp2 rnd (x * y))
= round beta fexp1 rnd (x * y).