kernel-Int.fib_two_mul
- Kind
- kernel-term
- Status
- checked
Supports: Int.fib_two_mul is admitted by the trusted kernel gate, and its canonical type is the pinned Mathlib statement symbol for symbol: ((x0 : Int) -> Eq.{1} Int (Int.fib (Int.mul (Int.ofNat (AxNat.succ (AxNat.succ AxNat.zero))) x0)) (Int.mul (Int.fib x0) (Int.sub (Int.mul (Int.ofNat (AxNat.succ (AxNat.succ AxNat.zero))) (Int.fib (Int.add x0 Int.one))) (Int.fib x0)))).
cargo run -q --release -p axeyum-lean-kernel --example int_theorem_inventory -- fib_two_mul 2>/dev/null | grep -cE '^theorem[[:space:]]+Int\.fib_two_mul[[:space:]]+\(\(x0[[:space:]]+:[[:space:]]+Int\)[[:space:]]+->[[:space:]]+Eq\.\{1\}[[:space:]]+Int[[:space:]]+\(Int\.fib[[:space:]]+\(Int\.mul[[:space:]]+\(Int\.ofNat[[:space:]]+\(AxNat\.succ[[:space:]]+\(AxNat\.succ[[:space:]]+AxNat\.zero\)\)\)[[:space:]]+x0\)\)[[:space:]]+\(Int\.mul[[:space:]]+\(Int\.fib[[:space:]]+x0\)[[:space:]]+\(Int\.sub[[:space:]]+\(Int\.mul[[:space:]]+\(Int\.ofNat[[:space:]]+\(AxNat\.succ[[:space:]]+\(AxNat\.succ[[:space:]]+AxNat\.zero\)\)\)[[:space:]]+\(Int\.fib[[:space:]]+\(Int\.add[[:space:]]+x0[[:space:]]+Int\.one\)\)\)[[:space:]]+\(Int\.fib[[:space:]]+x0\)\)\)\)$' Evidence notes
The pattern pins the ENTIRE rendered type, not just the name, so a transposed factor (`fib n` and `fib(n+1)` swapped inside the `sub`, or `sub` folded to `add`) cannot pass. Verified discriminating on this tree: 1 against the real row, 0 against a row with `Int.sub` rewritten to `Int.add` and 0 against a row with the `2` literal (`AxNat.succ (AxNat.succ AxNat.zero)`) collapsed to `AxNat.zero`. Tab separators matched with `[[:space:]]`, never `\t` -- see this repository's documented GNU-grep/ugrep divergence. `--release` is MANDATORY: this binary also builds creal/complex/cpoint, which overflow the default debug thread stack, and a debug run's empty output would read as ABSENT.