kernel-Int.wilson
- Kind
- kernel-term
- Status
- checked
Supports: `Int.wilson` is admitted with exactly the type in formal.statement. The proof assembles ten increments. Int.prod_range_pairing_collapse: a fixed-point-free involution pairing each factor with its inverse collapses prodRange to 1. Nat.inverseIndex_fixed_point: on {0..p-2} the ONLY fixed points of the inverse map are 0 and p-2. Nat.inverseIndex_fixes_zero / _fixes_last: which element each of those two IS -- the transport nothing had, and without which the collapse could not be instantiated. Nat.inverseIndex_interior_fixed_point_free: the interior has none. Int.prodRange_shiftFront: a general front-peel with no side conditions. Int.factorial_interior_modeq_one: the interior, reindexed onto [0,n), collapses to 1. Wilson is then the two survivors 1 and p-1, whose product is p-1 = -1. p = 2 needs its own branch: relating p-2 to p-3 in the front-peel requires p >= 3, so the proof splits by Nat.lt_or_eq_of_le and the p = 2 branch needs no reindex at all (p-2 = 0, closed by prodRange_zero). Injectivity of the reindexed sigma' is derived GENERICALLY from involution rather than transported across the shift, which avoids discharging a truncated-subtraction side condition per index.
test "$(scripts/cargo-serialized.sh test -p axeyum-lean-kernel --lib int_prelude::int_prelude_tests::wilson_concludes_the_negative_residue_under_primality -- --exact 2>&1 | grep -Ec 'test result: ok\. 1 passed; 0 failed')" -ge 1 Evidence notes
A FOOTPRINT CHECK CANNOT CARRY THIS CLAIM, and for this theorem that is the entire guarantee. A theorem concluding +1 instead of -1, or one with primality weakened to 0 < p, has an IDENTICALLY EMPTY axiom footprint. Both are false: 4! = 24 = -1 mod 5, not 1; 3! = 6 = 2 mod 4, not -1. Mutation-verified 2026-08-24 by the coordinating lane on the merged tree, re-run rather than taken from the establishing lane's report, with the occurrence count of each mutation pattern ASSERTED before applying it: rewriting the pinned conclusion Int.neg Int.one -> Int.one gives `585 passed; 1 failed` naming this test and no other; weakening the primality substring guard from 2 <= p to 0 <= p gives the same; restored and hash-checked, 586 passed. The occurrence assertion is not ceremony -- an earlier sed-based mutation on a different pin silently failed to match (rustfmt had split the constant across lines) and the resulting green suite read as a dead guard. The command is anchored on the exact `1 passed; 0 failed` count so an unmatched filter -- which prints `running 0 tests ... ok` and exits 0 -- cannot read as success.