kernel-reconstructed-orthocentre-cofactor-identity
- Kind
- kernel-term
- Status
- checked
Supports: conclusion = (-1)*g0 + (-1)*g1 at eight universally quantified Rat coordinates, admitted by crate::Kernel::add_declaration as Check.geometry_orthocentre_cofactor_identity. The polynomials are NOT hand-copied: the test calls axeyum_cas::geometry_corpus::corpus() for the orthocentre-altitudes-concurrent problem, runs axeyum_cas::geometry_certify::certify on it, and translates cert.generators / cert.conclusions[0].poly / cert.conclusions[0].cofactors -- asserting first that both cofactors are the CONSTANT -1 and that the coordinate ORDER is the certificate's own. The proof is emitted by a Rust-side normalizer (prove_scale, prove_merge) whose every step is a Rat ring lemma (left_distrib, right_distrib, add_assoc, add_comm, mul_assoc, mul_comm, mul_zero, zero_add, add_zero, Rat.ofInt_add, Rat.ofInt_mul); the kernel re-derives all of them. The declaration's axiom_footprint is asserted EMPTY and its kind asserted Declaration::Theorem in the same test.
cargo test -p axeyum-lean-kernel --lib rat_prelude::cas_geometry_bridge_tests::tests::geometry_orthocentre_cofactor_identity_kernel_checked -- --exact 2>/dev/null | grep -cE '^test rat_prelude::cas_geometry_bridge_tests::tests::geometry_orthocentre_cofactor_identity_kernel_checked \.\.\. ok$' Evidence notes
Measured wall-clock 7.09s for all three tests in the module together, including the one-time Rat prelude build -- comparable to the univariate sibling bridges despite being symbolic in eight variables, because every monomial is built by one function and is therefore an OPAQUE atom: no mul_comm or mul_assoc step ever has to see inside one, so the identity is linear rather than a ring-normalisation problem. MUTATION-VERIFIED both halves separately, each killing exactly one test: (a) perturbing the scaled coefficient (k*c -> k*c+1) kills it at the merged == conclusion assertion, pinning the STATEMENT to the certificate; (b) swapping one lemma in the zero-drop path (Rat.zero_add -> Rat.add_zero, same arity, same argument, wrong direction) kills it with a TypeMismatch out of add_declaration in 6.93s, showing the PROOF is genuinely re-derived by the trust anchor and that a wrong rewrite is refused in bounded time.