kernel-Nat.totient_dvd_totient_mul_prime
- Kind
- kernel-term
- Status
- checked
Supports: totient(x) | totient(x*q) for prime q, with the whole rendered type pinned.
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- totient_dvd_totient_mul_prime 2>/dev/null | tr '\t' ' ' | grep -Fc 'Nat.totient_dvd_totient_mul_prime 5 ((x0 : AxNat) -> ((x1 : AxNat) -> ((x2 : And (AxNat.le (AxNat.succ (AxNat.succ AxNat.zero)) x1) (((x2 : AxNat) -> ((x3 : AxNat.dvd x2 x1) -> Or (Eq.{1} AxNat x2 (AxNat.succ AxNat.zero)) (Eq.{1} AxNat x2 x1))))) -> AxNat.dvd (AxNat.totient x0) (AxNat.totient (AxNat.mul x0 x1)))))')" -ge 1 Evidence notes
The grep pins the WHOLE rendered type. The direction of the divisibility is the thing worth pinning: `AxNat.dvd (AxNat.totient x0) (AxNat.totient (AxNat.mul x0 x1))` transposed to `dvd (totient (mul x0 x1)) (totient x0)` is a FALSE statement (at x = 1, q = 3 it asks 2 | 1), and the Rust test asserts `!def_eq` between the two at free variables. `nat_theorem_inventory` exits non-zero for a name that does not exist, and `grep -Fc` consumes the whole pipe with the count then tested, rather than `grep -q`, which would SIGPIPE the producer under pipefail. Exactly one name is passed: measured 2026-08-30, this tool silently keeps only the LAST of several name arguments.