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 Compare. Require Import Rbase. Require Import Rfunctions. Require Import Rseries. Require Import PartSum. Require Import Binomial. Require Import Omega. Local Open Scope R_scope.
TT Ak; 0<=k<=N
Fixpoint prod_f_R0 (f:nat -> R) (N:nat) : R := match N with | O => f O | S p => prod_f_R0 f p * f (S p) end. Notation prod_f_SO := (fun An N => prod_f_R0 (fun n => An (S n)) N). (**********)forall (An : nat -> R) (n k : nat), (k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)forall (An : nat -> R) (n k : nat), (k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)An:nat -> Rk:natH:(k < 0)%natprod_f_R0 An 0 = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (0 - k - 1)An:nat -> Rn, k:natH:(k < S n)%natHrecn:(k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)prod_f_R0 An (S n) = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (S n - k - 1)An:nat -> Rn, k:natH:(k < S n)%natHrecn:(k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)prod_f_R0 An (S n) = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (S n - k - 1)An:nat -> Rn, k:natH:(k < S n)%natHrecn:(k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)H0:k = n \/ (k < n)%natH1:k = nprod_f_R0 An (S n) = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (S n - k - 1)An:nat -> Rn, k:natH:(k < S n)%natHrecn:(k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)H0:k = n \/ (k < n)%natH1:(k < n)%natprod_f_R0 An (S n) = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (S n - k - 1)An:nat -> Rn, k:natH:(k < S n)%natHrecn:(k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)H0:k = n \/ (k < n)%natH1:k = nprod_f_R0 An n * An (S n) = prod_f_R0 An n * An (n + 1 + 0)%natAn:nat -> Rn, k:natH:(k < S n)%natHrecn:(k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)H0:k = n \/ (k < n)%natH1:(k < n)%natprod_f_R0 An (S n) = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (S n - k - 1)An:nat -> Rn, k:natH:(k < S n)%natHrecn:(k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)H0:k = n \/ (k < n)%natH1:(k < n)%natprod_f_R0 An (S n) = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (S n - k - 1)An:nat -> Rn, k:natH:(k < S n)%natHrecn:(k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)H0:k = n \/ (k < n)%natH1:(k < n)%natprod_f_R0 An (S n) = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (S (n - k - 1))An:nat -> Rn, k:natH:(k < S n)%natHrecn:(k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)H0:k = n \/ (k < n)%natH1:(k < n)%natprod_f_R0 An n * An (S n) = prod_f_R0 An k * (prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1) * An (k + 1 + S (n - k - 1))%nat)An:nat -> Rn, k:natH:(k < S n)%natHrecn:(k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)H0:k = n \/ (k < n)%natH1:(k < n)%natS n = (k + S (n - k))%natAn:nat -> Rn, k:natH:(k < S n)%natHrecn:(k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)H0:k = n \/ (k < n)%natH1:(k < n)%natprod_f_R0 An n * An (S n) = prod_f_R0 An k * (prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1) * An (S n))An:nat -> Rn, k:natH:(k < S n)%natHrecn:(k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)H0:k = n \/ (k < n)%natH1:(k < n)%natS n = (k + 1 + S (n - k - 1))%natAn:nat -> Rn, k:natH:(k < S n)%natHrecn:(k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)H0:k = n \/ (k < n)%natH1:(k < n)%natS n = (k + S (n - k))%natAn:nat -> Rn, k:natH:(k < S n)%natHrecn:(k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)H0:k = n \/ (k < n)%natH1:(k < n)%natS n = (k + 1 + S (n - k - 1))%natAn:nat -> Rn, k:natH:(k < S n)%natHrecn:(k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)H0:k = n \/ (k < n)%natH1:(k < n)%natS n = (k + S (n - k))%natomega. Qed. (**********)An:nat -> Rn, k:natH:(k < S n)%natHrecn:(k < n)%nat -> prod_f_R0 An n = prod_f_R0 An k * prod_f_R0 (fun l : nat => An (k + 1 + l)%nat) (n - k - 1)H0:k = n \/ (k < n)%natH1:(k < n)%natS n = (k + S (n - k))%natforall (An : nat -> R) (N : nat), (forall n : nat, (n <= N)%nat -> 0 <= An n) -> 0 <= prod_f_R0 An Nforall (An : nat -> R) (N : nat), (forall n : nat, (n <= N)%nat -> 0 <= An n) -> 0 <= prod_f_R0 An NAn:nat -> RH:forall n : nat, (n <= 0)%nat -> 0 <= An n0 <= prod_f_R0 An 0An:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n) -> 0 <= prod_f_R0 An N0 <= prod_f_R0 An (S N)An:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n) -> 0 <= prod_f_R0 An N0 <= prod_f_R0 An (S N)An:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n) -> 0 <= prod_f_R0 An N0 <= prod_f_R0 An NAn:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n) -> 0 <= prod_f_R0 An N0 <= An (S N)apply H; apply le_n. Qed. (**********)An:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n) -> 0 <= prod_f_R0 An N0 <= An (S N)forall (An Bn : nat -> R) (N : nat), (forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn Nforall (An Bn : nat -> R) (N : nat), (forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn NAn, Bn:nat -> RH:forall n : nat, (n <= 0)%nat -> 0 <= An n <= Bn nprod_f_R0 An 0 <= prod_f_R0 Bn 0An, Bn:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An n <= Bn nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn Nprod_f_R0 An (S N) <= prod_f_R0 Bn (S N)An, Bn:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An n <= Bn nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn Nprod_f_R0 An (S N) <= prod_f_R0 Bn (S N)An, Bn:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An n <= Bn nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn Nprod_f_R0 An N * An (S N) <= prod_f_R0 An N * Bn (S N)An, Bn:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An n <= Bn nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn Nprod_f_R0 An N * Bn (S N) <= prod_f_R0 Bn N * Bn (S N)An, Bn:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An n <= Bn nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn N0 <= prod_f_R0 An NAn, Bn:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An n <= Bn nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn NAn (S N) <= Bn (S N)An, Bn:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An n <= Bn nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn Nprod_f_R0 An N * Bn (S N) <= prod_f_R0 Bn N * Bn (S N)An, Bn:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An n <= Bn nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn NAn (S N) <= Bn (S N)An, Bn:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An n <= Bn nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn Nprod_f_R0 An N * Bn (S N) <= prod_f_R0 Bn N * Bn (S N)An, Bn:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An n <= Bn nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn Nprod_f_R0 An N * Bn (S N) <= prod_f_R0 Bn N * Bn (S N)An, Bn:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An n <= Bn nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn N0 <= Bn (S N)An, Bn:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An n <= Bn nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn Nprod_f_R0 An N <= prod_f_R0 Bn NAn, Bn:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An n <= Bn nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn NH0:0 <= An (S N)H1:An (S N) <= Bn (S N)0 <= Bn (S N)An, Bn:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An n <= Bn nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn Nprod_f_R0 An N <= prod_f_R0 Bn Napply HrecN; intros; elim (H n (le_trans _ _ _ H0 (le_n_Sn N))); intros; split; assumption. Qed.An, Bn:nat -> RN:natH:forall n : nat, (n <= S N)%nat -> 0 <= An n <= Bn nHrecN:(forall n : nat, (n <= N)%nat -> 0 <= An n <= Bn n) -> prod_f_R0 An N <= prod_f_R0 Bn Nprod_f_R0 An N <= prod_f_R0 Bn N
Application to factorial
forall n : nat, INR (fact n) = prod_f_R0 (fun k : nat => if Nat.eq_dec k 0 then 1 else INR k) nforall n : nat, INR (fact n) = prod_f_R0 (fun k : nat => if Nat.eq_dec k 0 then 1 else INR k) nINR (fact 0) = prod_f_R0 (fun k : nat => if Nat.eq_dec k 0 then 1 else INR k) 0n:natHrecn:INR (fact n) = prod_f_R0 (fun k : nat => if Nat.eq_dec k 0 then 1 else INR k) nINR (fact (S n)) = prod_f_R0 (fun k : nat => if Nat.eq_dec k 0 then 1 else INR k) (S n)n:natHrecn:INR (fact n) = prod_f_R0 (fun k : nat => if Nat.eq_dec k 0 then 1 else INR k) nINR (fact (S n)) = prod_f_R0 (fun k : nat => if Nat.eq_dec k 0 then 1 else INR k) (S n)n:natHrecn:INR (fact n) = prod_f_R0 (fun k : nat => if Nat.eq_dec k 0 then 1 else INR k) nINR (fact n + n * fact n) = INR (fact n) * match n with | 0%nat => 1 | S _ => INR n + 1 endintros; repeat rewrite plus_INR;rewrite mult_INR;ring. Qed.n:natHrecn:INR (fact n) = prod_f_R0 (fun k : nat => if Nat.eq_dec k 0 then 1 else INR k) nforall n0 : nat, INR (fact (S n0) + S n0 * fact (S n0)) = INR (fact (S n0)) * (INR (S n0) + 1)forall n : nat, (n <= 2 * n)%natforall n : nat, (n <= 2 * n)%natn:nat(0 <= 2 * 0)%natn:natforall n0 : nat, (n0 <= 2 * n0)%nat -> (S n0 <= 2 * S n0)%natn:natforall n0 : nat, (n0 <= 2 * n0)%nat -> (S n0 <= 2 * S n0)%natn, n0:natH:(n0 <= 2 * n0)%nat(S n0 <= S (S (2 * n0)))%natn, n0:natH:(n0 <= 2 * n0)%natS (S (2 * n0)) = (2 * S n0)%natn, n0:natH:(n0 <= 2 * n0)%natS (S (2 * n0)) = (2 * S n0)%natn, n0:natH:(n0 <= 2 * n0)%nat(2 * n0 + 2)%nat = (2 * S n0)%natring. Qed.n, n0:natH:(n0 <= 2 * n0)%nat(2 * n0 + 2)%nat = (2 * (n0 + 1))%nat
We prove that (N!)^2<=(2N-k)!*k! forall k in |O;2N|
forall N k : nat, (k <= 2 * N)%nat -> (INR (fact N))² <= INR (fact (2 * N - k)) * INR (fact k)forall N k : nat, (k <= 2 * N)%nat -> (INR (fact N))² <= INR (fact (2 * N - k)) * INR (fact k)forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)forall N k : nat, (k <= 2 * N)%nat -> (INR (fact N))² <= INR (fact (2 * N - k)) * INR (fact k)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)forall N k : nat, (k <= 2 * N)%nat -> (INR (fact N))² <= INR (fact (2 * N - k)) * INR (fact k)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nforall N k : nat, (k <= 2 * N)%nat -> (INR (fact N))² <= INR (fact (2 * N - k)) * INR (fact k)H:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)n:natn = 0%nat -> (0 < n)%nat -> 1 = INR nH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nforall N k : nat, (k <= 2 * N)%nat -> (INR (fact N))² <= INR (fact (2 * N - k)) * INR (fact k)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nforall N k : nat, (k <= 2 * N)%nat -> (INR (fact N))² <= INR (fact (2 * N - k)) * INR (fact k)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%nat -> prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH2:k = N \/ (k < N)%nat \/ (N < k)%natH3:k = Nprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH2:k = N \/ (k < N)%nat \/ (N < k)%natH3:(k < N)%nat \/ (N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH2:k = N \/ (k < N)%nat \/ (N < k)%natH3:(k < N)%nat \/ (N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun l : nat => if Nat.eq_dec l 0 then 1 else INR l) N * prod_f_R0 (fun l : nat => if Nat.eq_dec (N + 1 + l) 0 then 1 else INR (N + 1 + l)) (2 * N - k - N - 1) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N < 2 * N - k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat0 <= prod_f_R0 (fun l : nat => if Nat.eq_dec l 0 then 1 else INR l) NH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun l : nat => if Nat.eq_dec (N + 1 + l) 0 then 1 else INR (N + 1 + l)) (2 * N - k - N - 1) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N < 2 * N - k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun l : nat => if Nat.eq_dec (N + 1 + l) 0 then 1 else INR (N + 1 + l)) (2 * N - k - N - 1) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N < 2 * N - k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun l : nat => if Nat.eq_dec (N + 1 + l) 0 then 1 else INR (N + 1 + l)) (N - k - 1) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N - k - 1)%nat = (2 * N - k - N - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N < 2 * N - k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%natprod_f_R0 (fun l : nat => if Nat.eq_dec l 0 then 1 else INR l) k * prod_f_R0 (fun l : nat => if Nat.eq_dec (k + 1 + l) 0 then 1 else INR (k + 1 + l)) (N - k - 1) <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) k * prod_f_R0 (fun l : nat => if Nat.eq_dec (N + 1 + l) 0 then 1 else INR (N + 1 + l)) (N - k - 1)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N - k - 1)%nat = (2 * N - k - N - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N < 2 * N - k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat0 <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%natprod_f_R0 (fun l : nat => if Nat.eq_dec (k + 1 + l) 0 then 1 else INR (k + 1 + l)) (N - k - 1) <= prod_f_R0 (fun l : nat => if Nat.eq_dec (N + 1 + l) 0 then 1 else INR (N + 1 + l)) (N - k - 1)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N - k - 1)%nat = (2 * N - k - N - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N < 2 * N - k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%natprod_f_R0 (fun l : nat => if Nat.eq_dec (k + 1 + l) 0 then 1 else INR (k + 1 + l)) (N - k - 1) <= prod_f_R0 (fun l : nat => if Nat.eq_dec (N + 1 + l) 0 then 1 else INR (N + 1 + l)) (N - k - 1)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N - k - 1)%nat = (2 * N - k - N - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N < 2 * N - k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(k < N)%natn:natH2:(n <= N - k - 1)%nat(if Nat.eq_dec (k + 1 + n) 0 then 1 else INR (k + 1 + n)) <= (if Nat.eq_dec (N + 1 + n) 0 then 1 else INR (N + 1 + n))H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N - k - 1)%nat = (2 * N - k - N - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N < 2 * N - k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(k < N)%natn:natH2:(n <= N - k - 1)%natINR (k + 1 + n) <= (if Nat.eq_dec (N + 1 + n) 0 then 1 else INR (N + 1 + n))H:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(k < N)%natn:natH2:(n <= N - k - 1)%nat(0 < k + 1 + n)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N - k - 1)%nat = (2 * N - k - N - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N < 2 * N - k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(k < N)%natn:natH2:(n <= N - k - 1)%natINR (k + 1 + n) <= INR (N + 1 + n)H:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(k < N)%natn:natH2:(n <= N - k - 1)%nat(0 < N + 1 + n)%natH:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(k < N)%natn:natH2:(n <= N - k - 1)%nat(0 < k + 1 + n)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N - k - 1)%nat = (2 * N - k - N - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N < 2 * N - k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(k < N)%natn:natH2:(n <= N - k - 1)%nat(0 < N + 1 + n)%natH:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(k < N)%natn:natH2:(n <= N - k - 1)%nat(0 < k + 1 + n)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N - k - 1)%nat = (2 * N - k - N - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N < 2 * N - k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(k < N)%natn:natH2:(n <= N - k - 1)%nat(0 < k + 1 + n)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N - k - 1)%nat = (2 * N - k - N - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N < 2 * N - k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N - k - 1)%nat = (2 * N - k - N - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N < 2 * N - k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N - k - 1)%nat = (2 * N - k - N - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N < 2 * N - k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(k < N)%nat(N < 2 * N - k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) kH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun l : nat => if Nat.eq_dec l 0 then 1 else INR l) N * prod_f_R0 (fun l : nat => if Nat.eq_dec (N + 1 + l) 0 then 1 else INR (N + 1 + l)) (k - N - 1) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat0 <= prod_f_R0 (fun l : nat => if Nat.eq_dec l 0 then 1 else INR l) NH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun l : nat => if Nat.eq_dec (N + 1 + l) 0 then 1 else INR (N + 1 + l)) (k - N - 1) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) N <= prod_f_R0 (fun l : nat => if Nat.eq_dec (N + 1 + l) 0 then 1 else INR (N + 1 + l)) (k - N - 1) * prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun l : nat => if Nat.eq_dec l 0 then 1 else INR l) (2 * N - k) * prod_f_R0 (fun l : nat => if Nat.eq_dec (2 * N - k + 1 + l) 0 then 1 else INR (2 * N - k + 1 + l)) (N - (2 * N - k) - 1) <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k) * prod_f_R0 (fun l : nat => if Nat.eq_dec (N + 1 + l) 0 then 1 else INR (N + 1 + l)) (k - N - 1)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(2 * N - k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat0 <= prod_f_R0 (fun k0 : nat => if Nat.eq_dec k0 0 then 1 else INR k0) (2 * N - k)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun l : nat => if Nat.eq_dec (2 * N - k + 1 + l) 0 then 1 else INR (2 * N - k + 1 + l)) (N - (2 * N - k) - 1) <= prod_f_R0 (fun l : nat => if Nat.eq_dec (N + 1 + l) 0 then 1 else INR (N + 1 + l)) (k - N - 1)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(2 * N - k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun l : nat => if Nat.eq_dec (2 * N - k + 1 + l) 0 then 1 else INR (2 * N - k + 1 + l)) (N - (2 * N - k) - 1) <= prod_f_R0 (fun l : nat => if Nat.eq_dec (N + 1 + l) 0 then 1 else INR (N + 1 + l)) (k - N - 1)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(2 * N - k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%natprod_f_R0 (fun l : nat => if Nat.eq_dec (2 * N - k + 1 + l) 0 then 1 else INR (2 * N - k + 1 + l)) (k - N - 1) <= prod_f_R0 (fun l : nat => if Nat.eq_dec (N + 1 + l) 0 then 1 else INR (N + 1 + l)) (k - N - 1)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(k - N - 1)%nat = (N - (2 * N - k) - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(2 * N - k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(N < k)%natn:natH2:(n <= k - N - 1)%nat(if Nat.eq_dec (2 * N - k + 1 + n) 0 then 1 else INR (2 * N - k + 1 + n)) <= (if Nat.eq_dec (N + 1 + n) 0 then 1 else INR (N + 1 + n))H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(k - N - 1)%nat = (N - (2 * N - k) - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(2 * N - k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(N < k)%natn:natH2:(n <= k - N - 1)%natINR (2 * N - k + 1 + n) <= (if Nat.eq_dec (N + 1 + n) 0 then 1 else INR (N + 1 + n))H:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(N < k)%natn:natH2:(n <= k - N - 1)%nat(0 < 2 * N - k + 1 + n)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(k - N - 1)%nat = (N - (2 * N - k) - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(2 * N - k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(N < k)%natn:natH2:(n <= k - N - 1)%natINR (2 * N - k + 1 + n) <= INR (N + 1 + n)H:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(N < k)%natn:natH2:(n <= k - N - 1)%nat(0 < N + 1 + n)%natH:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(N < k)%natn:natH2:(n <= k - N - 1)%nat(0 < 2 * N - k + 1 + n)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(k - N - 1)%nat = (N - (2 * N - k) - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(2 * N - k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(N < k)%natn:natH2:(n <= k - N - 1)%nat(0 < N + 1 + n)%natH:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(N < k)%natn:natH2:(n <= k - N - 1)%nat(0 < 2 * N - k + 1 + n)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(k - N - 1)%nat = (N - (2 * N - k) - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(2 * N - k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n0 : nat, 0 <= (if Nat.eq_dec n0 0 then 1 else INR n0)H0:forall n0 : nat, (0 < n0)%nat -> (if Nat.eq_dec n0 0 then 1 else INR n0) = INR n0N, k:natH1:(k <= 2 * N)%natH4:(N < k)%natn:natH2:(n <= k - N - 1)%nat(0 < 2 * N - k + 1 + n)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(k - N - 1)%nat = (N - (2 * N - k) - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(2 * N - k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(k - N - 1)%nat = (N - (2 * N - k) - 1)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(2 * N - k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(2 * N - k < N)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natH4:(N < k)%nat(N < k)%natH:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natomega. Qed. (**********)H:forall n : nat, 0 <= (if Nat.eq_dec n 0 then 1 else INR n)H0:forall n : nat, (0 < n)%nat -> (if Nat.eq_dec n 0 then 1 else INR n) = INR nN, k:natH1:(k <= 2 * N)%natk = N \/ (k < N)%nat \/ (N < k)%natforall n : nat, 0 < INR (fact n)intro; apply lt_INR_0; apply neq_O_lt; red; intro; elim (fact_neq_0 n); symmetry ; assumption. Qed.forall n : nat, 0 < INR (fact n)
We have the following inequality : (C 2N k) <= (C 2N N) forall k in |O;2N|
forall N k : nat, (k <= 2 * N)%nat -> C (2 * N) k <= C (2 * N) Nforall N k : nat, (k <= 2 * N)%nat -> C (2 * N) k <= C (2 * N) NN, k:natH:(k <= 2 * N)%nat0 <= INR (fact (2 * N))N, k:natH:(k <= 2 * N)%nat/ (INR (fact k) * INR (fact (2 * N - k))) <= / (INR (fact N) * INR (fact (2 * N - N)))N, k:natH:(k <= 2 * N)%nat/ (INR (fact k) * INR (fact (2 * N - k))) <= / (INR (fact N) * INR (fact (2 * N - N)))N, k:natH:(k <= 2 * N)%nat/ (INR (fact k) * INR (fact (2 * N - k))) <= / (INR (fact N) * INR (fact N))N, k:natH:(k <= 2 * N)%natN = (2 * N - N)%natN, k:natH:(k <= 2 * N)%nat0 < INR (fact N) * INR (fact N)N, k:natH:(k <= 2 * N)%natINR (fact N) * INR (fact N) * / (INR (fact k) * INR (fact (2 * N - k))) <= INR (fact N) * INR (fact N) * / (INR (fact N) * INR (fact N))N, k:natH:(k <= 2 * N)%natN = (2 * N - N)%natN, k:natH:(k <= 2 * N)%natINR (fact N) * INR (fact N) * / (INR (fact k) * INR (fact (2 * N - k))) <= INR (fact N) * INR (fact N) * / (INR (fact N) * INR (fact N))N, k:natH:(k <= 2 * N)%natN = (2 * N - N)%natN, k:natH:(k <= 2 * N)%natINR (fact N) * INR (fact N) * / (INR (fact k) * INR (fact (2 * N - k))) <= 1N, k:natH:(k <= 2 * N)%natINR (fact N) * INR (fact N) <> 0N, k:natH:(k <= 2 * N)%natN = (2 * N - N)%natN, k:natH:(k <= 2 * N)%nat0 < INR (fact k) * INR (fact (2 * N - k))N, k:natH:(k <= 2 * N)%natINR (fact k) * INR (fact (2 * N - k)) * (/ (INR (fact k) * INR (fact (2 * N - k))) * (INR (fact N) * INR (fact N))) <= INR (fact k) * INR (fact (2 * N - k)) * 1N, k:natH:(k <= 2 * N)%natINR (fact N) * INR (fact N) <> 0N, k:natH:(k <= 2 * N)%natN = (2 * N - N)%natN, k:natH:(k <= 2 * N)%natINR (fact k) * INR (fact (2 * N - k)) * (/ (INR (fact k) * INR (fact (2 * N - k))) * (INR (fact N) * INR (fact N))) <= INR (fact k) * INR (fact (2 * N - k)) * 1N, k:natH:(k <= 2 * N)%natINR (fact N) * INR (fact N) <> 0N, k:natH:(k <= 2 * N)%natN = (2 * N - N)%natN, k:natH:(k <= 2 * N)%nat1 * (INR (fact N) * INR (fact N)) <= INR (fact k * fact (2 * N - k))N, k:natH:(k <= 2 * N)%natINR (fact k * fact (2 * N - k)) <> 0N, k:natH:(k <= 2 * N)%natINR (fact N) * INR (fact N) <> 0N, k:natH:(k <= 2 * N)%natN = (2 * N - N)%natN, k:natH:(k <= 2 * N)%nat(INR (fact N))² <= INR (fact (2 * N - k)) * INR (fact k)N, k:natH:(k <= 2 * N)%nat(INR (fact N))² = INR (fact N) * INR (fact N)N, k:natH:(k <= 2 * N)%natINR (fact k * fact (2 * N - k)) <> 0N, k:natH:(k <= 2 * N)%natINR (fact N) * INR (fact N) <> 0N, k:natH:(k <= 2 * N)%natN = (2 * N - N)%natN, k:natH:(k <= 2 * N)%nat(k <= 2 * N)%natN, k:natH:(k <= 2 * N)%nat(INR (fact N))² = INR (fact N) * INR (fact N)N, k:natH:(k <= 2 * N)%natINR (fact k * fact (2 * N - k)) <> 0N, k:natH:(k <= 2 * N)%natINR (fact N) * INR (fact N) <> 0N, k:natH:(k <= 2 * N)%natN = (2 * N - N)%natN, k:natH:(k <= 2 * N)%nat(INR (fact N))² = INR (fact N) * INR (fact N)N, k:natH:(k <= 2 * N)%natINR (fact k * fact (2 * N - k)) <> 0N, k:natH:(k <= 2 * N)%natINR (fact N) * INR (fact N) <> 0N, k:natH:(k <= 2 * N)%natN = (2 * N - N)%natN, k:natH:(k <= 2 * N)%natINR (fact k * fact (2 * N - k)) <> 0N, k:natH:(k <= 2 * N)%natINR (fact N) * INR (fact N) <> 0N, k:natH:(k <= 2 * N)%natN = (2 * N - N)%natN, k:natH:(k <= 2 * N)%natINR (fact N) * INR (fact N) <> 0N, k:natH:(k <= 2 * N)%natN = (2 * N - N)%natomega. Qed.N, k:natH:(k <= 2 * N)%natN = (2 * N - N)%nat