Я не смог найти доказательства того, что N choose k
является интегральным в стандартной библиотеке Coq. Что будет коротким автономным доказательством этой леммы?
Lemma fact_divides N k: k <= N -> Nat.divide (fact k * fact (N - k)) (fact N).
Я видел, что в ssreflect.binomial.v они обошли всю проблему, рекурсивно определив choose
, choose(N,k) = choose(N-1,k) + choose(N-1,k-1)
, а затем показали, что choose(N,k) * k! * (N-k)! = N!
.
Однако было бы неплохо иметь прямое доказательство вышеизложенного, не прибегая к треугольнику Паскаля. Многие из "неофициальных" доказательств, которые появляются, когда я ищу их здесь в Stack. * Неявно используют шаги алгебры для рациональных чисел, и они не потрудились показать, что это работает строго для nat
деления.
EDIT:
Благодаря ответу @ Bubbler ниже (на основе этой математики ), доказательство просто
intros. destruct (fact_div_fact_fact k (N - k)) as [d Hd].
exists d. rewrite <- Hd. apply f_equal. omega.