kernel-Nat.add_eq_zero_iff
- Kind
- kernel-term
- Status
- checked
Supports: ∀ {m n : ℕ}, m + n = 0 ↔ m = 0 ∧ n = 0
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- add_eq_zero_iff 2>/dev/null | grep -Ec '^Nat\.add_eq_zero_iff[[:space:]]')" -ge 1 Evidence notes
`build_nat_prelude` admits `Nat.add_eq_zero_iff` through the trusted `Kernel::add_declaration` gate, declared in `nat_prelude/add_basics.rs`. Declared as `Nat.add_eq_zero_iff`, NOT `Nat.add_eq_zero` -- that name is already taken in this prelude by a distinct, WEAKER theorem: `nat_prelude/algebra.rs`'s `declare_add_no_zero_summands` admits `Nat.add_eq_zero : add a b = 0 -> a = 0 /\ b = 0`, the mp-ONLY arrow (built for a bitwise `land_aux`/`lor_aux` zero-summand argument, predating this session), not the `Iff` Mathlib's pinned v4.30 source states for `Nat.add_eq_zero` today (Mathlib deprecated the arrow-only reading and renamed the `Iff` to `Nat.add_eq_zero_iff` on 2025-10-26, per `Init/Data/Nat/Lemmas.lean` at the pinned commit -- `Nat.add_eq_zero` there is now the deprecated alias for the SAME `Iff` this fact states). A prelude can never redeclare a taken name, so this fact closes under the post-rename name; `declare_add_eq_zero_iff`'s mp reuses the existing `add_eq_zero` arrow directly, and mpr substitutes both conjuncts via `congr` and closes with `zero_add`. `nat_theorem_inventory`'s rendered type is `(x0:AxNat)->(x1:AxNat)->Iff (Eq (add x0 x1) zero) (And (Eq x0 zero) (Eq x1 zero))`, matching this fact's `formal.statement`. `nat_theorem_inventory` exits non-zero for a name that does not exist, and the `grep -c` count (tested `-ge 1`, not piped into `grep -q`) requires the admitted declaration to actually be printed. Verified both ways: the real name greps to a count `-ge 1`; grepping a made-up name (`Nat.add_eq_zero_iff_bogus`) greps to `0`.