Hint Resolve mul_constant_mul_br : Recurrence.
Hint Rewrite @mul_constant_mul_br : Recurrence.
End BR_CONSTANTS.
Section BR_BR.
(* Lemma 12 *)
Definition add_add_br_add_br: forall `{Ring R} (n: nat)
(c1 c2: R) (f1 f2: nat -> R),
({{c1, plus, f1 }} # n) + ({{c2, plus, f2}} # n) =
({{ (c1 + c2), plus, (fun n => f1 n + f2 n) }}) # n.
Definition mulCRFn `{Ring R} (c1 c2: R)
(f1 f2: nat -> R)
(n: nat): R:=
(((f2 # n) * {{c1, plus, f1}} # (n - 1))  +
((f1 # n) * {{c2, plus, f2}} # (n - 1))  +
(f1 # n) * (f2 # n)).

(* Specifications: *)
(* Lemma 13 *)
(* Definition in paper is WRONG. They index both br1, br2 and the functions with the _same index_. It should be one minus *)
Lemma mul_add_br_add_br:
forall `{Ring R}
(c1 c2: R)
(f1 f2: nat -> R)
(n: nat),
({{c1, plus, f1}} # n) * ({{c2, plus, f2}} # n) =
((mkBR (c1 * c2) plus (mulCRFn c1 c2 f1 f2)) # n).