nat-countrange-bij-1
- Kind
- kernel-term
- Status
- checked
Supports: `Nat.countRange_bij` is a checked `Declaration::Theorem` with an EMPTY axiom footprint in all eight preludes that build the naturals, AND its admitted type renders with the selected-set INJECTIVITY hypothesis (`Eq.{1} AxNat (x2 x6) (x2 x7)) -> Eq.{1} AxNat x6 x7`), the SECOND ROUND TRIP (`Eq.{1} AxNat (x2 (x3 x10)) x10`), and the CROSS-BOUND conclusion (`AxNat.countRange x0 x4` against `AxNat.countRange x1 x5` -- two different predicates at two different bounds). Each of the three is load-bearing. Without the conclusion anchor the checker would pass for a same-bound law; without the round-trip anchor it would pass for a version whose surjectivity had been dropped (making the statement FALSE, since an injection into a larger selected set does not equate the counts); without the injectivity anchor it would pass for the derived four-hypothesis form.
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_bij[[:space:]]+0[[:space:]].*Eq\.\{1\} AxNat \(x2 x6\) \(x2 x7\)\) -> Eq\.\{1\} AxNat x6 x7.*Eq\.\{1\} AxNat \(x2 \(x3 x10\)\) x10.*Eq\.\{1\} AxNat \(AxNat\.countRange x0 x4\) \(AxNat\.countRange x1 x5\)')" = 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` and on three separate fragments of the rendered type -- the injectivity hypothesis, the second round trip, and the cross-bound conclusion -- with the row count pinned at 8, one per prelude that builds the naturals. The name alone would NOT discriminate, because `Nat.countRange_bij` is a prefix of `Nat.countRange_bij_of_inverse`; the `[[:space:]]+0[[:space:]]` after the name is what separates them, and the injectivity fragment confirms it independently. Run 2026-09-02: 8 rows.