kernel-Nat.ascFactorial_eq_div
- Kind
- kernel-term
- Status
- checked
Supports: ∀ (n k : ℕ), (n + 1).ascFactorial k = (n + k).factorial / n.factorial
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- ascFactorial_eq_div 2>/dev/null | /usr/bin/grep -Ec '^Nat\.ascFactorial_eq_div[[:space:]]')" -ge 1 Evidence notes
`build_nat_prelude` admits `Nat.ascFactorial_eq_div` through the trusted `Kernel::add_declaration` gate, declared in new module `nat_prelude/asc_factorial_div.rs`. Chains two already-proved pieces: `choose_factorial_add::desc_factorial_add_eq_factorial_at(n, k)` (`descFactorial(n+k,k) * n! = (n+k)!`, exposed `pub(super)` for reuse rather than re-derived) converted to the exact-division form by the standard `div_eq_of_mul_eq` route, then bridged to `ascFactorial` via `Nat.add_descFactorial_eq_ascFactorial` (`F:ml430-nat-add-descfactorial-eq-ascfactorial-5faac784`). No new induction. `nat_theorem_inventory`'s rendered type is `((x0 : AxNat) -> ((x1 : AxNat) -> Eq.{1} AxNat (AxNat.ascFactorial (AxNat.succ x0) x1) (AxNat.div (AxNat.factorial (AxNat.add x0 x1)) (AxNat.factorial x0))))`, matching this fact's `formal.statement` (`AxNat.succ x0` is `n+1`). The `-ge 1` count-based test (not `grep -q`) requires the admitted declaration to actually be printed; grepping a made-up name greps to `0`.