Identifier
F:nat-prod-range-add-of-one-above
Proof route
kernel-lean
External status
proved
Axiom footprint
Empty

Recorded description

If a function is constantly 1 at and above a point k, then its product over [0, k+j) equals its product over [0, k), for every j. The induction goes on j rather than on the bound because Nat.add recurses on its right argument, so add k (succ m) is succ-shaped for symbolic k.

Formal statement
theorem Nat.prodRange_add_of_one_above : ((x0 : ((x0 : AxNat) -> AxNat)) -> ((x1 : AxNat) -> ((x2 : AxNat) -> ((x3 : ((x3 : AxNat) -> ((x4 : AxNat.le x1 x3) -> Eq.{1} AxNat (x0 x3) (AxNat.succ AxNat.zero)))) -> Eq.{1} AxNat (AxNat.prodRange x0 (AxNat.add x1 x2)) (AxNat.prodRange 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. n is <= n plus anything One is a right identity for mul Current fact The product of a multiset sum i
2 direct dependencies 1 direct dependents

Evidence

nat-prod-range-add-of-one-above-1

Kind
kernel-term
Status
checked

Supports: Nat.prodRange_add_of_one_above is admitted by the trusted kernel gate with the type recorded in formal.statement.

Checker command
out=$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- prodRange_add_of_one_above 2>&1) && test "$(printf "%s\n" "$out" | grep -cE '^Nat\.prodRange_add_of_one_above.7.\(\(x0 : \(\(x0 : AxNat\) -> AxNat\)\) -> \(\(x1 : AxNat\) -> \(\(x2 : AxNat\) -> \(\(x3 : \(\(x3 : AxNat\) -> \(\(x4 : AxNat\.le x1 x3\) -> Eq\.\{1\} AxNat \(x0 x3\) \(AxNat\.succ AxNat\.zero\)\)\)\) -> Eq\.\{1\} AxNat \(AxNat\.prodRange x0 \(AxNat\.add x1 x2\)\) \(AxNat\.prodRange x0 x1\)\)\)\)\)$')" = 1
Evidence notes

`build_nat_prelude` admits this theorem only through the trusted kernel gate, so a successful build IS the type-check. The pattern pins the ARITY and the FULL rendered type, not the theorem's presence: `scripts/new-fact.py` rejected a name-only pattern as population-only, because it catches the row disappearing but not the statement changing inside a row that is still there.

footprint-nat-prod-range-add-of-one-above

Kind
instance-pin
Status
checked

Supports: axiom_footprint: [] -- the Nat environment admits no trusted declaration

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

Reports `nat: axiom=0 opaque=0 quotient=0 total_trusted=0` over the FULL trusted surface (Axiom, Opaque and Quotient), not `Declaration::Axiom` alone, and exits non-zero unless the surface is empty. The enumeration is per-environment rather than per-theorem; it bounds this theorem's footprint because a proof cannot depend on a trusted declaration the environment does not contain. Read directly from `Kernel::axiom_footprint` via `theorem_axiom_footprint`, this theorem's row prints footprint size 0 and an empty axiom column, and all 904 `nat` rows do. (Count the tool's OWN summary line, not `grep -c '^nat'` -- the summary starts with `nat:` too, so the naive count is 905.)

Provenance

{
  "date": "2026-09-02",
  "established_by": "axeyum-lean-kernel build_nat_prelude",
  "source": "theorem name and canonical type read directly via nat_theorem_inventory, which prints render_lean of the admitted type; declared by `nat_prelude/multiset_prod.rs` (lane nat-factorization)."
}