kernel-Nat.factorial_dvd_ascFactorial
- Kind
- kernel-term
- Status
- checked
Supports: ∀ (n k : ℕ), k.factorial ∣ n.ascFactorial k
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- factorial_dvd_ascFactorial 2>/dev/null | grep -Ec '^Nat\.factorial_dvd_ascFactorial[[:space:]]')" -ge 1 Evidence notes
`build_nat_prelude` admits `Nat.factorial_dvd_ascFactorial` through the trusted `Kernel::add_declaration` gate. Route: `Nat.ascFactorial_succ_eq_factorial_mul_choose : (succ m).ascFactorial k = k! * (m+k).choose k` (declared alongside, `asc_factorial.rs`), reindexed by `n := succ m` so no `Nat.sub` is ever needed (unlike the falling-factorial bridge, which truncates). Proved by induction on `k`, `m` fixed, chaining `asc_factorial_succ`, the IH, `mul_left_comm`, `Nat.succ_add`, `Nat.succ_mul_choose_eq`, `Nat.add_succ`, `mul_assoc` and `factorial_succ`. `factorial_dvd_ascFactorial` case-splits `n`: `n = 0` via `Nat.zero_ascFactorial_succ` (ascFactorial 0 (succ k) = 0, by induction on `k`) + `dvd_zero` (`k = 0` via `dvd_refl`); `n = succ m` via the bridge + `Nat.dvd_mul`, transported along the bridge equation. `nat_theorem_inventory` exits non-zero for a name that does not exist, and the `grep -c` count (tested `-ge 1`, not piped into `grep -q`) requires the admitted declaration to actually be printed.