kernel-Nat.log_of_lt
- Kind
- kernel-term
- Status
- checked
Supports: For all b and n, if n < b then log_b(n) = 0.
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- log_of_lt 2>/dev/null | grep -Ec '^Nat\.log_of_lt[[:space:]]')" -ge 1 Evidence notes
`build_nat_prelude` admits this theorem through the trusted `Kernel::add_declaration` gate, which re-checks the proof term against the stated type, so producing this row at all is a machine-checked proof. The first theorem about `Nat.log` that carries a HYPOTHESIS, and the one that fixed the shape of the definition. `Nat.logAux`'s guard is two nested `Nat.ble` cuts, and the two cuts commute semantically but not for proof cost: only the OUTERMOST cut collapses the whole term with a single rewrite. `n < b` refutes `b <= n`, so that cut was put outermost and this proof is one `Eq.rec` over `Nat.ble_eq_false_of_lt`; with the cuts the other way round it would have needed a second case analysis on `2 <= b` as well. Nothing was given up for it -- `ble zero y` reduces to `Bool.true` unconditionally, so the outer cut never blocks the base-0 and base-1 equations, which stay pure `refl`. The induction on `n` carries the hypothesis in its motive (`fun m => Lt m b -> Eq (log b m) 0`) because `n` is both the fuel and the argument; the induction hypothesis is never used. `nat_theorem_inventory` exits non-zero for a name that does not exist, and `grep -Ec` consumes the pipe and the count is tested, so the exit status depends on what the run found.