kernel-Nat.and_or_distrib_right
- Kind
- kernel-term
- Status
- checked
Supports: ∀ (x y z : ℕ), (x ||| y) &&& z = x &&& z ||| y &&& z
test "$(cargo run -q --release -p axeyum-lean-kernel --example nat_theorem_inventory -- and_or_distrib_right 2>/dev/null | grep -Ec '^Nat\.and_or_distrib_right[[:space:]]')" -ge 1 Evidence notes
`build_nat_prelude` admits `Nat.and_or_distrib_right` (`nat_prelude/and_or_distrib.rs`) through the trusted `Kernel::add_declaration` gate. `nat_theorem_inventory`'s rendered type is `(x0 x1 x2 : AxNat) -> Eq (land (lor x0 x1) x2) (lor (land x0 x2) (land x1 x2))`, matching this fact's `formal.statement` up to variable naming. Anchored with `^Nat\.and_or_distrib_right[[:space:]]`; `grep -Ec` consumes the pipe so the tested count decides the exit status. Run `--release` -- the debug build of this inventory example SIGABRTs on stack depth (unrelated to this proof). Route: the right-handed twin of `Nat.and_or_distrib_left`'s recipe -- `Nat.eq_of_testBit_eq` plus `Nat.testBit_land`/`Nat.testBit_lor` twice per side, closed by `and_or_distrib.rs`'s `bit_and_or_distrib_right` (same nested `{0,1}` case split, `mul` scaling each operand on the right of `max` instead of the left). Mathlib's `&&&`/`|||` for `Nat` are `Nat.land`/`Nat.lor`, so reconciling this mirror to a NEW `Nat.and_or_distrib_right` theorem is honest under the mirror-flip criterion in CLAUDE.md.