kernel-Nat.and_or_distrib_left
- Kind
- kernel-term
- Status
- checked
Supports: ∀ (x y z : ℕ), x &&& (y ||| z) = x &&& y ||| x &&& z
test "$(cargo run -q --release -p axeyum-lean-kernel --example nat_theorem_inventory -- and_or_distrib_left 2>/dev/null | grep -Ec '^Nat\.and_or_distrib_left[[:space:]]')" -ge 1 Evidence notes
`build_nat_prelude` admits `Nat.and_or_distrib_left` (`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 x0 (lor x1 x2)) (lor (land x0 x1) (land x0 x2))`, matching this fact's `formal.statement` up to variable naming. Anchored with `^Nat\.and_or_distrib_left[[: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: `Nat.eq_of_testBit_eq` extensionality (`xor_algebra.rs`) plus `Nat.testBit_land`/`Nat.testBit_lor` twice per side, reduced to a per-bit AND-distributes-over-OR identity closed by a nested `{0,1}` case split (8 leaves, each `refl`, `and_or_distrib.rs`'s `bit_and_or_distrib`). Mathlib's `&&&`/`|||` for `Nat` are `Nat.land`/`Nat.lor`, so reconciling this mirror to a NEW `Nat.and_or_distrib_left` theorem is honest under the mirror-flip criterion in CLAUDE.md.