Built with Alectryon, running Coq+SerAPI v8.10.0+0.7.0. Coq sources are in this panel; goals and messages will appear in the other. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus.
(************************************************************************) (* * The Coq Proof Assistant / The Coq Development Team *) (* v * INRIA, CNRS and contributors - Copyright 1999-2018 *) (* <O___,, * (see CREDITS file for the list of authors) *) (* \VV/ **************************************************************) (* // * This file is distributed under the terms of the *) (* * GNU Lesser General Public License Version 2.1 *) (* * (see LICENSE file for the text of the license) *) (************************************************************************) Require Import Rbase. Require Import Rfunctions. Require Import Rseries. Require Import PartSum. Local Open Scope R_scope. (**********)forall (An : nat -> R) (N : nat), (0 < N)%nat -> sum_f_R0 An N = sum_f_R0 An (Init.Nat.pred N) + An Nforall (An : nat -> R) (N : nat), (0 < N)%nat -> sum_f_R0 An N = sum_f_R0 An (Init.Nat.pred N) + An NAn:nat -> RN:natH:(0 < N)%natsum_f_R0 An N = sum_f_R0 An (Init.Nat.pred N) + An NAn:nat -> RN:natH:(0 < N)%natsum_f_R0 An (S (Init.Nat.pred N)) = sum_f_R0 An (Init.Nat.pred (S (Init.Nat.pred N))) + An (S (Init.Nat.pred N))An:nat -> RN:natH:(0 < N)%natS (Init.Nat.pred N) = NAn:nat -> RN:natH:(0 < N)%natsum_f_R0 An (Init.Nat.pred N) + An (S (Init.Nat.pred N)) = sum_f_R0 An (Init.Nat.pred (S (Init.Nat.pred N))) + An (S (Init.Nat.pred N))An:nat -> RN:natH:(0 < N)%natS (Init.Nat.pred N) = Nsymmetry ; apply S_pred with 0%nat; assumption. Qed. (**********)An:nat -> RN:natH:(0 < N)%natS (Init.Nat.pred N) = Nforall (An Bn : nat -> R) (N : nat), sum_f_R0 (fun l : nat => An l + Bn l) N = sum_f_R0 An N + sum_f_R0 Bn Nforall (An Bn : nat -> R) (N : nat), sum_f_R0 (fun l : nat => An l + Bn l) N = sum_f_R0 An N + sum_f_R0 Bn NAn, Bn:nat -> RN:natsum_f_R0 (fun l : nat => An l + Bn l) N = sum_f_R0 An N + sum_f_R0 Bn NAn, Bn:nat -> Rsum_f_R0 (fun l : nat => An l + Bn l) 0 = sum_f_R0 An 0 + sum_f_R0 Bn 0An, Bn:nat -> RN:natHrecN:sum_f_R0 (fun l : nat => An l + Bn l) N = sum_f_R0 An N + sum_f_R0 Bn Nsum_f_R0 (fun l : nat => An l + Bn l) (S N) = sum_f_R0 An (S N) + sum_f_R0 Bn (S N)An, Bn:nat -> RN:natHrecN:sum_f_R0 (fun l : nat => An l + Bn l) N = sum_f_R0 An N + sum_f_R0 Bn Nsum_f_R0 (fun l : nat => An l + Bn l) (S N) = sum_f_R0 An (S N) + sum_f_R0 Bn (S N)rewrite HrecN; ring. Qed. (* The main result *)An, Bn:nat -> RN:natHrecN:sum_f_R0 (fun l : nat => An l + Bn l) N = sum_f_R0 An N + sum_f_R0 Bn Nsum_f_R0 (fun l : nat => An l + Bn l) N + (An (S N) + Bn (S N)) = sum_f_R0 An N + An (S N) + (sum_f_R0 Bn N + Bn (S N))forall (An Bn : nat -> R) (N : nat), (0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)forall (An Bn : nat -> R) (N : nat), (0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RH:(0 < 0)%natsum_f_R0 An 0 * sum_f_R0 Bn 0 = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) 0 + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (0 - l)%nat) (Init.Nat.pred (0 - k))) (Init.Nat.pred 0)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)sum_f_R0 An (S N) * sum_f_R0 Bn (S N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) (S N) + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred (S N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)sum_f_R0 An (S N) * sum_f_R0 Bn (S N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) (S N) + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred (S N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%nat -> sum_f_R0 An (S N) * sum_f_R0 Bn (S N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) (S N) + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred (S N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:N = 0%natsum_f_R0 An (S N) * sum_f_R0 Bn (S N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) (S N) + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred (S N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natsum_f_R0 An (S N) * sum_f_R0 Bn (S N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) (S N) + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred (S N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natsum_f_R0 An (S N) * sum_f_R0 Bn (S N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) (S N) + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred (S N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natsum_f_R0 An (S N) * sum_f_R0 Bn (S N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) (S N) + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat(sum_f_R0 An N + An (S N)) * (sum_f_R0 Bn N + Bn (S N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + (sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) N + An (S N) * Bn (S N - S N)%nat) + (sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N) + sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) (Init.Nat.pred (S N - S (Init.Nat.pred N))))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + sum_f_R0 An N * Bn (S N) + An (S N) * (sum_f_R0 Bn N + Bn (S N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + (sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) N + An (S N) * Bn (S N - S N)%nat) + (sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N) + sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) (Init.Nat.pred (S N - S (Init.Nat.pred N))))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + (sum_f_R0 An N * Bn (S N) + An (S N) * (sum_f_R0 Bn N + Bn (S N))) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) N + (An (S N) * Bn (S N - S N)%nat + (sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N) + sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) (Init.Nat.pred (S N - S (Init.Nat.pred N)))))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + (sum_f_R0 An N * Bn (S N) + An (S N) * (sum_f_R0 Bn N + Bn (S N))) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) N + (An (S N) * Bn (S N - S N)%nat + (sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N) + sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + (sum_f_R0 An N * Bn (S N) + (An (S N) * sum_f_R0 Bn N + An (S N) * Bn (S N))) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) N + (An (S N) * Bn (S N - S N)%nat + (sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N) + An (S N) * Bn (S N)))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + (sum_f_R0 An N * Bn (S N) + An (S N) * sum_f_R0 Bn N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) N + (An (S N) * Bn (S N - S N)%nat + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%nat -> sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + (sum_f_R0 An N * Bn (S N) + An (S N) * sum_f_R0 Bn N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) N + (An (S N) * Bn 0%nat + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:N = 1%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + (sum_f_R0 An N * Bn (S N) + An (S N) * sum_f_R0 Bn N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) N + (An (S N) * Bn 0%nat + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + (sum_f_R0 An N * Bn (S N) + An (S N) * sum_f_R0 Bn N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) N + (An (S N) * Bn 0%nat + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + (sum_f_R0 An N * Bn (S N) + An (S N) * sum_f_R0 Bn N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) N + (An (S N) * Bn 0%nat + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + (sum_f_R0 An N * Bn (S N) + An (S N) * sum_f_R0 Bn N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) N + (An (S N) * Bn 0%nat + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + (sum_f_R0 An N * Bn (S N) + An (S N) * sum_f_R0 Bn N) = sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) + (An (S N) * Bn 0%nat + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + (sum_f_R0 An N * Bn (S N) + An (S N) * sum_f_R0 Bn N) = An 0%nat * Bn (S N) + (An (S N) * Bn 0%nat + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + (sum_f_R0 An N * Bn (S N) + An (S N) * sum_f_R0 Bn N) = An 0%nat * Bn (S N) + (An (S N) * Bn 0%nat + (sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N)))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + (sum_f_R0 (fun i : nat => An (S i)) (Init.Nat.pred N) * Bn (S N) + An (S N) * sum_f_R0 Bn N) = An (S N) * Bn 0%nat + (sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + An (S N) * sum_f_R0 Bn N = An (S N) * Bn 0%nat + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + An (S N) * sum_f_R0 Bn N = An (S N) * Bn 0%nat + (sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + An (S N) * sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + An (S N) * sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + (An (S N) * Bn 0%nat + An (S N) * sum_f_R0 (fun i : nat => Bn (S i)) (Init.Nat.pred N)) = An (S N) * Bn 0%nat + (sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + An (S N) * sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + An (S N) * sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + An (S N) * sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + An (S N) * sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S (S (l + Init.Nat.pred N))) * Bn (N - l)%nat) (Init.Nat.pred (N - Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + An (S N) * sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S (S (l + Init.Nat.pred N))) * Bn (N - l)%nat) (Init.Nat.pred (N - Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + An (S N) * sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun k : nat => An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S (S (l + Init.Nat.pred N))) * Bn (N - l)%nat) (Init.Nat.pred (N - Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natAn (S N) * sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S (S (l + Init.Nat.pred N))) * Bn (N - l)%nat) (Init.Nat.pred (N - Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natAn (S N) * sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S (S (l + Init.Nat.pred N))) * Bn (N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat0%nat = Init.Nat.pred (N - Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natAn (S N) * sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) + An (S (S (Init.Nat.pred N))) * Bn NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat0%nat = Init.Nat.pred (N - Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natAn (S N) * sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) + An (S N) * Bn NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat0%nat = Init.Nat.pred (N - Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natAn (S N) * sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => Bn (S k) * An (S N)) (Init.Nat.pred (Init.Nat.pred N)) + An (S N) * Bn NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => Bn (S k) * An (S N)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat0%nat = Init.Nat.pred (N - Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natAn (S N) * (sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred (Init.Nat.pred N)) + Bn (S (Init.Nat.pred N))) = An (S N) * sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred (Init.Nat.pred N)) + An (S N) * Bn NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => Bn (S k) * An (S N)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat0%nat = Init.Nat.pred (N - Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natAn (S N) * (sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred (Init.Nat.pred N)) + Bn N) = An (S N) * sum_f_R0 (fun l : nat => Bn (S l)) (Init.Nat.pred (Init.Nat.pred N)) + An (S N) * Bn NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => Bn (S k) * An (S N)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat0%nat = Init.Nat.pred (N - Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => Bn (S k) * An (S N)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat0%nat = Init.Nat.pred (N - Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => Bn (S k) * An (S N)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat0%nat = Init.Nat.pred (N - Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => Bn (S k) * An (S N)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat0%nat = Init.Nat.pred (N - Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat0%nat = Init.Nat.pred (N - Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat0%nat = Init.Nat.pred (N - Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat0%nat = Init.Nat.pred 1An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat1%nat = (N - Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat1%nat = (N - Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat1%nat = (S (Init.Nat.pred N) - Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natS (Init.Nat.pred N) = NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat1%nat = S (Init.Nat.pred N - Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(Init.Nat.pred N <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natS (Init.Nat.pred N) = NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(Init.Nat.pred N <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natS (Init.Nat.pred N) = NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natS (Init.Nat.pred N) = NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k))) + An (S N) * Bn (S k)) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natsum_f_R0 (fun l : nat => An (S (S (l + i))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - i))) + An (S N) * Bn (S i) = sum_f_R0 (fun l : nat => An (S (S (l + i))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - i))) + An (S (S (Init.Nat.pred (N - i) + i))) * Bn (N - Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natsum_f_R0 (fun l : nat => An (S (S (l + i))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - i))) + An (S N) * Bn (S i) = sum_f_R0 (fun l : nat => An (S (S (l + i))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - i))) + An (S N) * Bn (N - Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natsum_f_R0 (fun l : nat => An (S (S (l + i))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - i))) + An (S N) * Bn (S i) = sum_f_R0 (fun l : nat => An (S (S (l + i))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - i))) + An (S N) * Bn (S i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS i = (N - Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS i = (N - Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR (S i) = INR N - (INR N - INR i - INR 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= Init.Nat.pred (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR 1 <= INR N - INR iAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR i - 1 + INR 1 <= INR i - 1 + (INR N - INR i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR i <= INR i - 1 + (INR N - INR i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR i <= INR N - INR 1An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR i <= INR (N - 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= Init.Nat.pred (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N - 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N - 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= 2)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= Init.Nat.pred (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (N - i) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (N - i) <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(S (Init.Nat.pred (N - i)) <= S (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(S (Init.Nat.pred (N - i)) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i)%nat = S (Init.Nat.pred (N - i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N <= i + N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i)%nat = S (Init.Nat.pred (N - i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i)%nat = S (Init.Nat.pred (N - i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i)%nat = S (Init.Nat.pred (N - i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i + 0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 < S (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 < 2)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= Init.Nat.pred (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS N = S (S (Init.Nat.pred (N - i) + i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR N + 1 = INR N - INR i - INR 1 + INR i + 1 + 1An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= Init.Nat.pred (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR 1 <= INR (N - i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR 1 <= INR N - INR iAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR i - 1 + INR 1 <= INR i - 1 + (INR N - INR i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR i <= INR i - 1 + (INR N - INR i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR i <= INR N - INR 1An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR i <= INR (N - 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N - 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= Init.Nat.pred (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N - 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N - 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= 2)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= Init.Nat.pred (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= Init.Nat.pred (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR 1 <= INR (Init.Nat.pred (N - i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR 1 <= INR (N - i - 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR 1 <= INR N - INR i - INR 1An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR i - 1 + INR 1 <= INR i - 1 + (INR N - INR i - INR 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR i <= INR i - 1 + (INR N - INR i - INR 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR i <= INR N - INR 1 - INR 1An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR N - INR 1 - INR 1 = INR i - 1 + (INR N - INR i - INR 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR i <= INR (N - 1 - 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR N - INR 1 - INR 1 = INR i - 1 + (INR N - INR i - INR 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N - 1 - 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR N - INR 1 - INR 1 = INR i - 1 + (INR N - INR i - INR 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= Init.Nat.pred (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N - 1 - 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR N - INR 1 - INR 1 = INR i - 1 + (INR N - INR i - INR 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N - 1 - 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR N - INR 1 - INR 1 = INR i - 1 + (INR N - INR i - INR 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= Init.Nat.pred (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR N - INR 1 - INR 1 = INR i - 1 + (INR N - INR i - INR 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR N - INR 1 - INR 1 = INR i - 1 + (INR N - INR i - INR 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 + 1 <= 1 + (N - 1))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR N - INR 1 - INR 1 = INR i - 1 + (INR N - INR i - INR 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 + 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR N - INR 1 - INR 1 = INR i - 1 + (INR N - INR i - INR 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR N - INR 1 - INR 1 = INR i - 1 + (INR N - INR i - INR 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR N - INR 1 - INR 1 = INR i - 1 + (INR N - INR i - INR 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR N - INR 1 - INR 1 = INR i - 1 + (INR N - INR i - INR 1)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= Init.Nat.pred (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i + 1 <= i + (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i + 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(S i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(S i <= S (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS (Init.Nat.pred N) = NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS (Init.Nat.pred N) = NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= Init.Nat.pred (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS (Init.Nat.pred N) = NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS (Init.Nat.pred N) = NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS (Init.Nat.pred N) = NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= Init.Nat.pred (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(1 <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(1 <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(2 <= S (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k)) + An (S k) * Bn (S N)) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k)) + An (S k) * Bn (S N)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + Bn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N) + sum_f_R0 (fun k : nat => An (S k) * Bn (S N)) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k)) + An (S k) * Bn (S N)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natBn (S N) * sum_f_R0 (fun l : nat => An (S l)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => An (S k) * Bn (S N)) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k)) + An (S k) * Bn (S N)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (N - k)) + An (S k) * Bn (S N)) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (S N - l)%nat) (Init.Nat.pred (S N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natAn (S i) * Bn (S N) + sum_f_R0 (fun l : nat => An (S (S (l + i))) * Bn (N - l)%nat) (Init.Nat.pred (N - i)) = An (S (0 + i)) * Bn (S N - 0)%nat + sum_f_R0 (fun i0 : nat => An (S (S i0 + i)) * Bn (S N - S i0)%nat) (Init.Nat.pred (Init.Nat.pred (S N - i)))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natAn (S i) * Bn (S N) + sum_f_R0 (fun l : nat => An (S (S (l + i))) * Bn (N - l)%nat) (Init.Nat.pred (N - i)) = An (S i) * Bn (S N - 0)%nat + sum_f_R0 (fun i0 : nat => An (S (S i0 + i)) * Bn (S N - S i0)%nat) (Init.Nat.pred (Init.Nat.pred (S N - i)))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natsum_f_R0 (fun l : nat => An (S (S (l + i))) * Bn (N - l)%nat) (Init.Nat.pred (N - i)) = sum_f_R0 (fun i0 : nat => An (S (S i0 + i)) * Bn (S N - S i0)%nat) (Init.Nat.pred (Init.Nat.pred (S N - i)))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natsum_f_R0 (fun l : nat => An (S (S (l + i))) * Bn (N - l)%nat) (Init.Nat.pred (N - i)) = sum_f_R0 (fun i0 : nat => An (S (S i0 + i)) * Bn (S N - S i0)%nat) (Init.Nat.pred (N - i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natInit.Nat.pred (N - i) = Init.Nat.pred (Init.Nat.pred (S N - i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nati0:natH5:(i0 <= Init.Nat.pred (N - i))%natAn (S (S (i0 + i))) * Bn (N - i0)%nat = An (S (S i0 + i)) * Bn (S N - S i0)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natInit.Nat.pred (N - i) = Init.Nat.pred (Init.Nat.pred (S N - i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nati0:natH5:(i0 <= Init.Nat.pred (N - i))%natAn (S (S (i0 + i))) * Bn (N - i0)%nat = An (S (S i0 + i)) * Bn (N - i0)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natInit.Nat.pred (N - i) = Init.Nat.pred (Init.Nat.pred (S N - i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nati0:natH5:(i0 <= Init.Nat.pred (N - i))%natAn (S (S (i0 + i))) * Bn (N - i0)%nat = An (S (S (i0 + i))) * Bn (N - i0)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nati0:natH5:(i0 <= Init.Nat.pred (N - i))%natS (i0 + i) = (S i0 + i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natInit.Nat.pred (N - i) = Init.Nat.pred (Init.Nat.pred (S N - i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nati0:natH5:(i0 <= Init.Nat.pred (N - i))%natS (i0 + i) = (S i0 + i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natInit.Nat.pred (N - i) = Init.Nat.pred (Init.Nat.pred (S N - i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natInit.Nat.pred (N - i) = Init.Nat.pred (Init.Nat.pred (S N - i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N - i)%nat = Init.Nat.pred (S N - i) -> Init.Nat.pred (N - i) = Init.Nat.pred (Init.Nat.pred (S N - i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N - i)%nat = Init.Nat.pred (S N - i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N - i)%nat = Init.Nat.pred (S N - i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N - i)%nat = (S N - i - 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natINR N - INR i = INR (S N) - INR i - INR 1An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(1 <= S N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(1 <= S N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(1 <= S N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(1 <= S N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(1 <= S N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(1 <= S N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(1 <= S N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i + 1 <= i + (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i + 1 <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < Init.Nat.pred (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < S N - S i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S N - S i)%nat = Init.Nat.pred (S N - i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S N - S i)%nat = Init.Nat.pred (S N - i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i + 0 < i + (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S N - S i)%nat = Init.Nat.pred (S N - i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i + 0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S N - S i)%nat = Init.Nat.pred (S N - i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S N - S i)%nat = Init.Nat.pred (S N - i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S N - S i)%nat = Init.Nat.pred (S N - i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S N - S i)%nat = Init.Nat.pred (S N - i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S N - S i)%nat = Init.Nat.pred (S N - i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S N - S i)%nat = Init.Nat.pred (S N - i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S N - S i)%nat = Init.Nat.pred (S N - i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S N - S i)%nat = Init.Nat.pred (S N - i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S N - S i)%nat = Init.Nat.pred (S N - i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S N - S i)%nat = (S N - i - 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natINR (S N) - INR (S i) = INR (S N) - INR i - INR 1An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(1 <= S N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(1 <= S N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(1 <= S N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(1 <= S N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(1 <= S N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(1 <= S N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(1 <= S N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i + 1 <= i + (S N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i + 1 <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(N <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(S i <= S N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(i <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + An 0%nat * Bn (S N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natAn 0%nat * Bn (S N) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun p : nat => An p * Bn (S N - p)%nat) NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natAn 0%nat * Bn (S N) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = An 0%nat * Bn (S N - 0)%nat + sum_f_R0 (fun i : nat => An (S i) * Bn (S N - S i)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natAn 0%nat * Bn (S N) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = An 0%nat * Bn (S N) + sum_f_R0 (fun i : nat => An (S i) * Bn (S N - S i)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun i : nat => An (S i) * Bn (S N - S i)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natAn (S i) * Bn (N - i)%nat = An (S i) * Bn (S N - S i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) + sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred (N - 0)) + sum_f_R0 (fun i : nat => sum_f_R0 (fun l : nat => An (S (l + S i)) * Bn (N - l)%nat) (Init.Nat.pred (N - S i))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N) + sum_f_R0 (fun i : nat => sum_f_R0 (fun l : nat => An (S (l + S i)) * Bn (N - l)%nat) (Init.Nat.pred (N - S i))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) + sum_f_R0 (fun i : nat => sum_f_R0 (fun l : nat => An (S (l + S i)) * Bn (N - l)%nat) (Init.Nat.pred (N - S i))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (S (l + k))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - k)))) (Init.Nat.pred (Init.Nat.pred N)) = sum_f_R0 (fun i : nat => sum_f_R0 (fun l : nat => An (S (l + S i)) * Bn (N - l)%nat) (Init.Nat.pred (N - S i))) (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natsum_f_R0 (fun l : nat => An (S (S (l + i))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - i))) = sum_f_R0 (fun l : nat => An (S (l + S i)) * Bn (N - l)%nat) (Init.Nat.pred (N - S i))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natsum_f_R0 (fun l : nat => An (S (S (l + i))) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - i))) = sum_f_R0 (fun l : nat => An (S (l + S i)) * Bn (N - l)%nat) (Init.Nat.pred (Init.Nat.pred (N - i)))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natInit.Nat.pred (Init.Nat.pred (N - i)) = Init.Nat.pred (N - S i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nati0:natH5:(i0 <= Init.Nat.pred (Init.Nat.pred (N - i)))%natAn (S (S (i0 + i))) * Bn (N - i0)%nat = An (S (i0 + S i)) * Bn (N - i0)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natInit.Nat.pred (Init.Nat.pred (N - i)) = Init.Nat.pred (N - S i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nati0:natH5:(i0 <= Init.Nat.pred (Init.Nat.pred (N - i)))%natAn (S (S (i0 + i))) * Bn (N - i0)%nat = An (S (S (i0 + i))) * Bn (N - i0)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nati0:natH5:(i0 <= Init.Nat.pred (Init.Nat.pred (N - i)))%natS (i0 + i) = (i0 + S i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natInit.Nat.pred (Init.Nat.pred (N - i)) = Init.Nat.pred (N - S i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nati0:natH5:(i0 <= Init.Nat.pred (Init.Nat.pred (N - i)))%natS (i0 + i) = (i0 + S i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natInit.Nat.pred (Init.Nat.pred (N - i)) = Init.Nat.pred (N - S i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natInit.Nat.pred (Init.Nat.pred (N - i)) = Init.Nat.pred (N - S i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natInit.Nat.pred (N - i) = (N - S i)%nat -> Init.Nat.pred (Init.Nat.pred (N - i)) = Init.Nat.pred (N - S i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natInit.Nat.pred (N - i) = (N - S i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natInit.Nat.pred (N - i) = (N - S i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(N - i - 1)%nat = (N - S i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR (N - i - 1) = INR (N - S i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natINR N - INR i - INR 1 = INR N - INR (S i)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(S i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(S i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(S i <= S (Init.Nat.pred (Init.Nat.pred N)))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(S (Init.Nat.pred (Init.Nat.pred N)) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(S (Init.Nat.pred (Init.Nat.pred N)) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred N <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natInit.Nat.pred N = S (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natInit.Nat.pred N = S (Init.Nat.pred (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 < S (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 < 2)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= Init.Nat.pred (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(1 <= N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i + 1 <= i + (N - i))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i + 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(S i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(S i <= S (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS (Init.Nat.pred N) = NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS (Init.Nat.pred N) = NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= Init.Nat.pred (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS (Init.Nat.pred N) = NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS (Init.Nat.pred N) = NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS (Init.Nat.pred N) = NAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%natS i = (i + 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(i <= Init.Nat.pred (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred (Init.Nat.pred N))%nat(Init.Nat.pred (Init.Nat.pred N) <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natsum_f_R0 (fun l : nat => An (S l) * Bn (N - l)%nat) (Init.Nat.pred N) = sum_f_R0 (fun l : nat => An (S (l + 0)) * Bn (N - l)%nat) (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nati:natH4:(i <= Init.Nat.pred N)%natAn (S i) * Bn (N - i)%nat = An (S (i + 0)) * Bn (N - i)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(0 < Init.Nat.pred N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(1 < S (Init.Nat.pred N))%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%nat(1 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:N = 1%nat \/ (2 <= N)%natH3:(2 <= N)%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = 1%nat \/ (2 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natH2:1%nat = N1%nat = 1%nat \/ (2 <= 1)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natm:natH2:(1 <= m)%natH3:S m = NS m = 1%nat \/ (2 <= S m)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natm:natH2:(1 <= m)%natH3:S m = NS m = 1%nat \/ (2 <= S m)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = sum_f_R0 (fun l : nat => An (S (l + S (Init.Nat.pred N))) * Bn (S N - l)%nat) 0An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = An (S (S (Init.Nat.pred N))) * Bn (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natAn (S N) * Bn (S N) = An (S N) * Bn (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natN = S (Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (S N - S (Init.Nat.pred N))An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat0%nat = Init.Nat.pred (N - Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat(N - Init.Nat.pred N)%nat = 1%nat -> 0%nat = Init.Nat.pred (N - Init.Nat.pred N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat(N - Init.Nat.pred N)%nat = 1%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat(N - Init.Nat.pred N)%nat = 1%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat(N - (N - 1))%nat = 1%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natINR N - (INR N - INR 1) = INR 1An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat(N - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat(1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat(N - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%nat(N - 1 <= N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H0:N = 0%nat \/ (0 < N)%natH1:(0 < N)%natS (Init.Nat.pred N) = Init.Nat.pred (S N)An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)N = 0%nat \/ (0 < N)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)H1:0%nat = N0%nat = 0%nat \/ (0 < 0)%natAn, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)m:natH1:(1 <= N)%natH0:m = NN = 0%nat \/ (0 < N)%natright; apply lt_le_trans with 1%nat; [ apply lt_n_Sn | exact H1 ]. Qed.An, Bn:nat -> RN:natH:(0 < S N)%natHrecN:(0 < N)%nat -> sum_f_R0 An N * sum_f_R0 Bn N = sum_f_R0 (fun k : nat => sum_f_R0 (fun p : nat => An p * Bn (k - p)%nat) k) N + sum_f_R0 (fun k : nat => sum_f_R0 (fun l : nat => An (S (l + k)) * Bn (N - l)%nat) (Init.Nat.pred (N - k))) (Init.Nat.pred N)m:natH1:(1 <= N)%natH0:m = NN = 0%nat \/ (0 < N)%nat