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

Recorded description

If m <= n then the number of primes up to and including m is at most the number of primes up to and including 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. The prime-counting function is [generated] kernel theorem Nat. Current fact
2 direct dependencies 0 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.primeCounting' (succ n)`, so this is `Nat.countRange_le_of_le` again with the hypothesis moved by `Nat.succ_le_succ`. The rendered type is what separates it from `F:nat-prime-counting-prime-mono`: the two differ only in which of the two counting conventions appears, and `primeCounting' 2 = 0` while `primeCounting 2 = 1`.

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"
}