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

Recorded description

If n is less than k, the falling factorial of n with k factors equals 0.

Formal statement
theorem Nat.descFactorial_of_lt : ((x0 : AxNat) -> ((x1 : AxNat) -> ((x2 : AxNat.lt x0 x1) -> Eq.{1} AxNat (AxNat.descFactorial x0 x1) AxNat.zero)))

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, k+1) = (n-k) * [generated] kernel theorem Nat. <= splits into < or = Every natural times zero is zer No natural number is less than Every natural minus itself is z Zero is a left absorbing elemen Mathlib v4.30 source propositio Current fact
8 direct dependencies 0 direct dependents

Evidence

kernel-Nat.descFactorial_of_lt

Kind
kernel-term
Status
checked

Supports: n < k -> n.descFactorial k = 0

Checker command
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- descFactorial_of_lt 2>/dev/null | grep -Ec '^Nat\.descFactorial_of_lt[[: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. Proved by induction on `k` (with `n` held fixed, no generalization needed inside the motive): `k = 0` is vacuous (`n < 0` is impossible, `Nat.not_lt_zero`); `k = succ j` splits `n < succ j` (via `le_of_lt_succ`) into `n < j` or `n = j` (via `lt_or_eq_of_le`) -- the first case chains the induction hypothesis through `mul_zero`, the second substitutes `j := n` (`Eq.rec`) into a goal computed once via `sub_self` then `zero_mul`. This is the definition's highest-risk seam: `Nat.sub` truncates rather than going negative, so a wrong argument order in the recursion step would still type-check and would only show up as a wrong VALUE, never a kernel rejection -- this theorem proves the truncation boundary rather than merely asserting it. `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_of_lt

Kind
kernel-term
Status
checked

Supports: the theorem applies correctly at a concrete instance and its hypothesis is load-bearing

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

Applies this theorem at the concrete pair `(5, 6)` (`5 < 6` built from `Nat.le.refl 6`) and confirms (via `Kernel::infer` plus `Kernel::def_eq` against an independently-built expected type) that the admitted conclusion is exactly `5.descFactorial 6 = 0`, which also matches DIRECT reduction of `5.descFactorial 6` (checked separately in the same test, with a negative reduction control). A second negative control substitutes a proof of `5 < 5` for the required `5 < 6` hypothesis and confirms `Kernel::infer` REJECTS it -- so the hypothesis is load-bearing, not merely present.

footprint-Nat.descFactorial_of_lt

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. The induction is over the constructed `Nat.rec` (`Prop`-valued motive, `level_zero`), no `WellFounded`/`Quot.sound`/`propext` needed. 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": "declare_desc_factorial_of_lt (crates/axeyum-lean-kernel/src/nat_prelude/desc_factorial.rs)"
}