kernel-Nat.self_le_factorial
- Kind
- kernel-term
- Status
- checked
Supports: ∀ (n : ℕ), n ≤ n.factorial
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- self_le_factorial 2>/dev/null | grep -Ec '^Nat\.self_le_factorial[[:space:]]')" -ge 1 Evidence notes
`build_nat_prelude` admits `Nat.self_le_factorial` through the trusted `Kernel::add_declaration` gate. Route (`desc_factorial.rs`, `declare_self_le_factorial`, independent of the `descFactorial`/`choose` bridge in the same file): direct induction on `n`. `n = 0` is `Nat.zero_le` directly. `n = succ j` scales `Nat.one_le_factorial` at `j` (`1 <= j!`, NOT the induction hypothesis, which only bounds `j` and is too weak) by `succ j` via `Nat.mul_le_mul_left`, rewrites `succ j * 1 = succ j` (`mul_one`) and commutes the right side (`mul_comm`) to `Le (succ j) (j! * succ j)`, then transports along `factorial_succ` (reversed) to the goal. `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.