Identifier
F:nat-prime-counting-prime-mono
Proof route
kernel-lean
External status
proved
Axiom footprint
Empty

Recorded description

If m <= n then the number of primes strictly below m is at most the number of primes strictly below n.

Formal statement
theorem Nat.primeCounting'_mono : ((x0 : AxNat) -> ((x1 : AxNat) -> ((x2 : AxNat.le x0 x1) -> AxNat.le (AxNat.primeCounting' x0) (AxNat.primeCounting' 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. Current fact The inclusive prime-counting fu The prime-counting function is
0 direct dependencies 2 direct dependents

Evidence

kernel-Nat.primeCounting'_mono

Kind
kernel-term
Status
checked

Supports: pi'(m) <= pi'(n) whenever m <= n

Checker command
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- 'Nat.primeCounting'_mono' 2>/dev/null | grep -xFc 'Nat.primeCounting'_mono	3	((x0 : AxNat) -> ((x1 : AxNat) -> ((x2 : AxNat.le x0 x1) -> AxNat.le (AxNat.primeCounting' x0) (AxNat.primeCounting' x1))))')" -ge 1
Evidence notes

`Nat.primeCounting' n` is `Nat.count Nat.isPrime n`, and `Nat.count` is definitionally `Nat.countRange`; both are `Regular` definitions with strictly decreasing delta heights (14 -> 13 -> 12), so the kernel accepts `Nat.countRange_le_of_le` at the predicate `Nat.isPrime` against this stated type by delta alone. The checker matches the FULL RENDERED TYPE rather than the name: a name-only checker is satisfied by a weakened statement, and here the weakening that matters is swapping `primeCounting'` for `primeCounting`, which is a DIFFERENT function (exclusive vs inclusive) with the same monotonicity proof.

footprint-Nat.primeCounting'_mono

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` bounds the footprint by enumerating the whole trusted surface: a theorem cannot depend on a trusted declaration the environment does not contain. All three kinds are covered -- counting `Declaration::Axiom` alone would not suffice, because `Opaque` has no proof body and `Quotient` admits `Quot.sound`. The module's own test `the_prime_counting_shelf_is_admitted_and_axiom_free` additionally asserts `Environment::contains` BEFORE reading the footprint, because `axiom_footprint` returns an empty set for a name that was never declared.

Provenance

{
  "date": "2026-09-06",
  "established_by": "lane chebyshev-pi-bounds (ADR-1655), roadmap W3-11",
  "source": "statement authored here against this kernel's own vocabulary; nothing copied"
}