kernel-Nat.pow_of_pow_add_prime
- Kind
- kernel-term
- Status
- checked
Supports: ∀ {a n : ℕ}, 1 < a → n ≠ 0 → Nat.Prime (a ^ n + 1) → ∃ m, n = 2 ^ m
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- pow_of_pow_add_prime 2>/dev/null | /usr/bin/grep -cE '^Nat\.pow_of_pow_add_prime[[:space:]]')" -ge 1 Evidence notes
`build_nat_prelude` admits `Nat.pow_of_pow_add_prime : forall a n, 1 < a -> n != 0 -> PrimeCond (a^n+1) -> exists m, n = 2^m` through the trusted `Kernel::add_declaration` gate (`nat_prelude/pow_add_prime.rs`, `declare_pow_of_pow_add_prime`). Primality is spelled inline (`2 <= x /\ forall c, c | x -> c = 1 \/ c = x`), matching this prelude's `exists_prime_dvd`/`exists_prime_factorization` convention -- there is no `Nat.Prime` predicate. Route: the odd-factor witnesses `(e, t)` from `Nat.pow_two_or_has_odd_factor` feed `Nat.dvd_pow_add_one_of_odd_mul_exp` (a prior lane's odd-factor divisibility step), exhibiting `a^e+1 | a^n+1`; primality then forces that divisor to be `1` or `a^n+1`, and both are excluded (`a^e+1 >= 2` from `pow_pos` since `a > 1`; `a^e+1 != a^n+1` from `e < n`, which needs `exponent_of(t) > 1` from `t != 0` via `mul_lt_mul_left`, combined with `pow_injective` and `lt_irrefl`). Checked against a genuinely FREE `a, n` (via `Kernel::infer_in` in a real `LocalContext`, `nat_prelude_tests.rs`) in addition to this named-declaration check; `nat_theorem_inventory` exits non-zero for a name that does not exist, and the anchored `grep -cE` count (tested `-ge 1`, not piped into `grep -q`) requires the admitted declaration to actually be printed. Verified against a fabricated name (`pow_of_pow_add_prime_bogus_xyz`) that the same command reports count 0.