Identifier
F:creal-mulpowcongr
Proof route
kernel-lean
External status
proved
Axiom footprint
Empty

Recorded description

For a coefficient function c, index j, and points x, y : CReal with x Equiv y: mul (c j) (pow x j) is Equiv to mul (c j) (pow y j) -- the identical statement shape CReal.powerSeriesTerm_congr proves for powerSeriesTerm's own unfolded body. What is new about this declaration is its PROVENANCE, not its content: it is produced by crates/axeyum-lean-kernel/src/creal/congruence.rs's CongruExpr/derive machinery -- a general-purpose structural-recursion deriver that walks a first-order expression tree (here Binary(Mul, Const(c j), Pow(Var, j))) and mechanically composes whichever registered congruence lemma each node's operation needs (mul_congr at the root, pow_congr under Pow), rather than a human writing out mul_congr/pow_congr composition by hand as CReal.powerSeriesTerm_congr's own declare function does. Measured on this tree: declare_power_series_term_congr's derive-plus-kernel-check step (the identical construction this deriver performs for THIS theorem) takes approximately 1.25 ms in a --release build and 1.40 ms in a debug build -- the deriver's mechanization cost is negligible next to the kernel's own admission cost. No hand-built equivalent of this exact statement exists anywhere in the merged tree as of this batch's base commit (grepped for mul_congr/pow_congr co-occurring with a congruence proof across every creal/*.rs file); the closest neighbour, creal/polynomial.rs's monomial-sum argument, proves a Cauchy bound, not an Equiv-congruence.

Formal statement
theorem CReal.mulPowCongr : ((x0 : ((x0 : AxNat) -> CReal)) -> ((x1 : AxNat) -> ((x2 : CReal) -> ((x3 : CReal) -> ((x4 : CReal.Equiv x2 x3) -> CReal.Equiv (CReal.mul (x0 x1) (CReal.pow x2 x1)) (CReal.mul (x0 x1) (CReal.pow x3 x1)))))))

Dependencies

The graph shows direct ledger edges. Follow a node to open its artifact page.

Direct dependencies appear to the left. The current fact is in the center. Facts that depend directly on it appear to the right. CReal.Equiv is reflexive Multiplication on the construct [generated] kernel theorem CRea Current fact [generated] kernel theorem CRea [generated] kernel theorem CRea
3 direct dependencies 2 direct dependents

Evidence

kernel-CReal.mulPowCongr

Kind
kernel-term
Status
checked

Supports: CReal.mulPowCongr is admitted by the trusted kernel gate with the type recorded in formal.statement.

Checker command
cargo run -q --release -p axeyum-lean-kernel --example theorem_dependency_inventory -- mulPowCongr 2>/dev/null | grep -cE '^CReal\.mulPowCongr[[:space:]]'
Evidence notes

build_creal_prelude admits CReal.mulPowCongr through the trusted Kernel::add_declaration gate. theorem_dependency_inventory exits non-zero for a named filter matching nothing; grep -c asserts the exact tab-anchored line. Verified with /usr/bin/grep directly (not the ugrep-backed interactive `grep` function) against a freshly built --release binary on this tree, returning count 1. --release is MANDATORY: this tool also builds creal/complex/cpoint, which overflow the default debug thread stack.

footprint-CReal.mulPowCongr

Kind
exhaustive-enumeration
Status
checked

Supports: axiom_footprint: [] -- the creal prelude's trusted surface is empty, which bounds CReal.mulPowCongr

Checker command
cargo run -q --release -p axeyum-lean-kernel --example nat_axiom_inventory -- --include-constructed --require-axiom-free creal
Evidence notes

Re-measured on this tree: creal: axiom=0 opaque=0 quotient=0 total_trusted=0, exits 0 printing 'ok: creal trusted surface = 0'. That bounds every declaration in the creal environment, including CReal.mulPowCongr, since a declaration cannot depend on a trusted declaration the environment does not contain. --require-axiom-free <name> errors for a prelude never built by this run rather than silently passing on zero rows. --release is MANDATORY here.

Provenance

{
  "date": "2026-08-27",
  "established_by": "axeyum-lean-kernel build_creal_prelude (crates/axeyum-lean-kernel/src/creal/congruence.rs, declare_power_series_term_congr, the CongruExpr-deriver route -- named `declare_power_series_term_congr` internally but registered under the constant p.mul_pow_congr / kernel name CReal.mulPowCongr, distinct from the hand-built creal/power.rs::declare_power_series_term_congr which registers CReal.powerSeriesTerm_congr)",
  "source": "canonical type read via kernel_declaration_projection's own UNFILTERED emit mode (cargo run -q --release -p axeyum-lean-kernel --example kernel_declaration_projection, no --require-declaration flag), which prints, per constructed prelude, one TSV row per declaration whose last field is kernel.render_lean(declaration.ty()). That output was piped to a scratchpad file and the exact row for this declaration's creal prelude row was extracted and injected here programmatically (a Python script reading the TSV, never hand-transcribed); direct theorem dependencies were cross-read from the same run's direct_theorems column (second-to-last field) and matched against the ledger's own registered facts (by parsing each candidate fact's formal.statement for its declared theorem/def name) to populate depends_on. No new probe binary was written for this batch; crates/ source was not touched to produce this batch."
}