kernel-Nat.log_eq_zero_iff
- Kind
- kernel-term
- Status
- checked
Supports: ∀ {b n : ℕ}, Nat.log b n = 0 ↔ n < b ∨ b ≤ 1
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- log_eq_zero_iff 2>/dev/null | grep -Ec '^Nat\.log_eq_zero_iff[[:space:]]')" -ge 1 Evidence notes
`build_nat_prelude` admits `Nat.log_eq_zero_iff` through the trusted `Kernel::add_declaration` gate (declared in `nat_prelude/log_clog_mirrors.rs`'s `declare_log_eq_zero_iff`). Route, `mpr` (`Or (Lt n b) (Le b 1) -> Eq (log b n) 0`): case-split the disjunction -- `Lt n b` closes by `log.rs`'s already-proved `Nat.log_of_lt`, `Le b 1` closes by this file's new `Nat.log_of_left_le_one` applied at `n` (the same boundary-split recipe as `Nat.clog_of_left_le_one`, over `Nat.log_zero_left`/`Nat.log_one_left`). Route, `mp` (`Eq (log b n) 0 -> Or (Lt n b) (Le b 1)`): case-split `Nat.lt_or_ge n b`; the `Lt n b` side is `Or.inl` directly; the `Le b n` side splits AGAIN on `Nat.lt_or_ge 1 b` -- `Le b 1` is `Or.inr` directly, `Lt 1 b` is refuted by this file's new `Nat.log_pos` (the same recipe as `Nat.clog_pos` with the two guard cuts' roles swapped), which gives `Lt 0 (log b n)`; transporting that along the hypothesis `Eq (log b n) 0` gives `Lt 0 0`, absurd via `Nat.lt_irrefl`, closing the goal by `False.elim`. `nat_theorem_inventory`'s rendered type for `Nat.log_eq_zero_iff` is `(x0:AxNat)->(x1:AxNat)->Iff (Eq (log x0 x1) zero) (Or (Lt x1 x0) (Le x0 (succ zero)))`, matching this fact's `formal.statement` verbatim (`x0`=b, `x1`=n). `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 against a deliberately misspelled name (`log_eq_zero_iffxxxxx`) that this same pipeline reports `0`.