kernel-Nat.crtSelfMap_injectiveOn
- Kind
- kernel-term
- Status
- checked
Supports: The coprimality-hypothesised injectivity of the residue-pairing self-map on [0, n*m), with the whole rendered type pinned.
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- crtSelfMap_injectiveOn 2>/dev/null | tr '\t' ' ' | grep -Fc 'Nat.crtSelfMap_injectiveOn 3 ((x0 : AxNat) -> ((x1 : AxNat) -> ((x2 : Eq.{1} AxNat (AxNat.gcd (AxNat.succ x0) (AxNat.succ x1)) (AxNat.succ AxNat.zero)) -> AxNat.injectiveOn (fun (x3 : AxNat) => AxNat.add (AxNat.mul (AxNat.succ x1) (AxNat.mod x3 (AxNat.succ x0))) (AxNat.mod x3 (AxNat.succ x1))) (AxNat.mul (AxNat.succ x1) (AxNat.succ x0)))))')" -ge 1 Evidence notes
The grep pins the WHOLE rendered type rather than the name, and here that is load-bearing rather than tidy. The kernel refuses a false theorem, but it cannot notice a statement that is weaker than intended, and this one has two ways to be weak that both still type-check: the map could be written with the two moduli swapped (`mod x (succ x1)` in the quotient slot), which is a DIFFERENT map, and the bound could be written `mul (succ x0) (succ x1)`, which is the same number by commutativity but a different term and not what `countRange_product` factors. Both are pinned by quoting the lambda and the bound verbatim. `nat_theorem_inventory` additionally exits non-zero for a name that does not exist, and `grep -Fc` consumes the whole pipe (so it cannot SIGPIPE the producer the way `grep -q` would) with the count tested by `test -ge 1`. NOTE, measured 2026-08-30: `nat_theorem_inventory` consumes only ONE name argument -- given two names in either order it reports on the LAST one only -- so this command deliberately passes exactly one.