nat-countrange-eq-zero-of-all-false-1
- Kind
- kernel-term
- Status
- checked
Supports: `Nat.countRange_eq_zero_of_all_false` is a checked `Declaration::Theorem` with an EMPTY axiom footprint in all eight preludes that build the naturals, AND its admitted type renders with BOTH the `Bool.false` in its hypothesis and the `AxNat.zero` in its conclusion. Anchoring on both is what makes this a checker rather than a name lookup: the near-miss theorem, and the one a careless edit would produce, is the same statement with `Bool.true` in the hypothesis (which would be false) or `x1` in the conclusion (which is `countRange_const_true` under the wrong name).
out=$(target/release/examples/kernel_declaration_projection 2>/dev/null 2>&1) && test "$(printf "%s\n" "$out" | grep -cE '^(nat|integer|characterization|rat|creal|complex|cpoint|ipc)[[:space:]]+theorem[[:space:]]+Nat\.countRange_eq_zero_of_all_false[[:space:]]+0[[:space:]].*Eq\.\{1\} Bool \(x0 x2\) Bool\.false.*Eq\.\{1\} AxNat \(AxNat\.countRange x0 x1\) AxNat\.zero')" = 8 Evidence notes
Verified discriminating by scripts/new-fact.py before this file was written: the pattern matches the real output and its match count drops on mutated output. Anchored on the footprint column `0`, on `Eq.{1} Bool (x0 x2) Bool.false` (the bounded hypothesis) and on `Eq.{1} AxNat (AxNat.countRange x0 x1) AxNat.zero` (the conclusion), with the row count pinned at 8 -- one per prelude that builds the naturals. The count fails when the declaration disappears from any prelude; the `0` fails if an axiom enters the footprint; the two rendered fragments fail if the statement drifts while the name survives. Run 2026-09-02: 8 rows.