Identifier
F:nat-desc-factorial-succ
Proof route
kernel-lean
External status
proved
Axiom footprint
Empty

Recorded description

The falling factorial of n with k+1 factors equals (n - k) times the falling factorial of n with k factors.

Formal statement
theorem Nat.descFactorial_succ : ((x0 : AxNat) -> ((x1 : AxNat) -> Eq.{1} AxNat (AxNat.descFactorial x0 (AxNat.succ x1)) (AxNat.mul (AxNat.sub x0 x1) (AxNat.descFactorial x0 x1))))

Dependencies

The graph shows direct ledger edges. Follow a node to open its artifact page.

Direct dependencies appear to the left. The current fact is in the center. Facts that depend directly on it appear to the right. descFactorial(n, 0) = 1 Current fact Mathlib v4.30 source propositio n < k implies descFactorial(n, descFactorial(n, 1) = n
1 direct dependencies 3 direct dependents

Evidence

kernel-Nat.descFactorial_succ

Kind
kernel-term
Status
checked

Supports: n.descFactorial (k+1) = (n - k) * n.descFactorial k

Checker command
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- descFactorial_succ 2>/dev/null | grep -Ec '^Nat\.descFactorial_succ[[:space:]]')" -ge 1
Evidence notes

`build_nat_prelude` admits this theorem through the trusted `Kernel::add_declaration` gate, which re-checks the proof term against the stated type. `Nat.descFactorial n (succ k)` iota-reduces (via `NatOps::define_binary`'s recursor application) directly to `(n - k) * descFactorial n k` -- the proof is `Eq.refl`, no rewrite. `n - k` is Lean's own `Nat.sub` (truncating), matching Mathlib's `Nat.descFactorial (n : ℕ) : ℕ → ℕ | 0 => 1 | k + 1 => (n - k) * descFactorial n k` argument order exactly. `nat_theorem_inventory` exits non-zero for a name that does not exist, and `grep -Ec` consumes the pipe and the count is tested, so the exit status depends on what the run found.

compute-Nat.descFactorial_succ

Kind
kernel-term
Status
checked

Supports: the successor equation composes correctly across multiple steps, at concrete instances

Checker command
cargo test -p axeyum-lean-kernel --lib nat_prelude::nat_prelude_tests::desc_factorial_computes_and_collapses_past_its_base
Evidence notes

`Kernel::def_eq` reduces `5.descFactorial 2` (two applications of the successor equation) to `20` (`5 * 4`) and `5.descFactorial 5` to `120` (`5!`), each with a negative reduction control forbidding the vacuous case, so this cannot pass without the successor equation actually unrolling the product.

footprint-Nat.descFactorial_succ

Kind
exhaustive-enumeration
Status
checked

Supports: axiom_footprint: [] -- the Nat prelude's trusted surface is empty

Checker command
cargo run -q -p axeyum-lean-kernel --example nat_axiom_inventory -- --require-axiom-free nat
Evidence notes

`nat_axiom_inventory --require-axiom-free nat` enumerates the built Nat environment and exits non-zero unless it admits no Axiom, Opaque or Quotient declaration. Measured 2026-08-28: `nat: axiom=0 opaque=0 quotient=0 total_trusted=0` with `Nat.descFactorial` and its four theorems declared.

Provenance

{
  "date": "2026-08-28",
  "established_by": "axeyum-lean-kernel build_nat_prelude, lane 212-nat-factorial-variants",
  "source": "the second of two definitional boundary equations `declare_desc_factorial` (`crates/axeyum-lean-kernel/src/nat_prelude/desc_factorial.rs`) admits alongside the `Nat.descFactorial` definition"
}