#E[2](𝔽̄_p) = 4 and E[2] ≅ (ℤ/2)² — N13 at n = 2, completing the small-prime subfamily n ∈ {2,3,5,7} (secp256k1Bar_two_torsion_structure + the closure characterization s…
Ecdlp.Curve.secp256k1Bar_two_torsion_structure, secp256k1Bar_two_nsmul_eq_zero_iff, secp256k1Bar_two_torsion_ncard
Full ledger claim and scope
#E[2](𝔽̄_p) = 4` and `E[2] ≅ (ℤ/2)²` — N13 at `n = 2`, completing the small-prime subfamily `n ∈ {2,3,5,7}` (`secp256k1Bar_two_torsion_structure` + the closure characterization `secp256k1Bar_two_nsmul_eq_zero_iff`: `2•P = O ⟺ y = 0`. Structurally the `n = 2` N13 instance — no multiplication formula: `2•P = O ⟺ P = −P ⟺ y = negY = −y ⟺ y = 0` (`char ≠ 2`), and `y = 0` on the curve forces `x³+7 = 0`. So `E[2] = {O} ∪ {(x,0) : X³+7-root}`, an explicit 4-element finset (no `±y` split — `y = 0` is forced), `1 + 3 = 4 = 2²`; N10(iii) at prime 2 classifies. The even companion of the odd family)
- Domain
- ecdlp-ledger
- Method
- closure 2-torsion (`y=0`) + `CubicSeparable` roots + N10(iii)
#E[3](𝔽̄_p) = 9 and E[3] ≅ (ℤ/3)² — node N13 at n = 3 (secp256k1Bar_three_torsion_structure: the 3-torsion subgroup of secp256k1 over the algebraic closure is additively Z…
Ecdlp.Curve.secp256k1Bar_three_torsion_structure, secp256k1Bar_three_torsion_ncard, secp256k1Bar_torsionBy_three_card
Full ledger claim and scope
#E[3](𝔽̄_p) = 9` and `E[3] ≅ (ℤ/3)²` — node N13 at `n = 3` (`secp256k1Bar_three_torsion_structure`: the 3-torsion subgroup of secp256k1 over the algebraic closure is additively `ZMod 3 × ZMod 3` — the full 2-dimensional `𝔽₃`-plane. Route: the torsion set is proved EQUAL to the explicit 9-element finset `{O} ∪ {(x, ±y) : Ψ₃(x) = 0}` — membership by the closure bridge, `y ≠ 0` at every `Ψ₃`-root by `Ψ₂Sq ⊥ Ψ₃`, the two `y`-values distinct since `char ≠ 2`, exactly `4` distinct roots by the separability certificates; count `1 + 4·2 = 9` by finset card algebra (`secp256k1Bar_three_torsion_ncard`/`_card`/`secp256k1Bar_torsionBy_three_card`); then the kernel-structure lemma N10(iii) classifies. Composes six previously landed rungs (closure bridge, exact root counts, coprimality certificate, `±y`-pairing, N10(iii), torsionBy vocabulary) — the endpoint `N13@3` of the `ψₙ↔E[n]` critical path at `n = 3`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (finset card algebra, `torsionBy`) + closure bridge + separability + coprimality + N10(iii)
#E[4](𝔽̄_p) = 16 and E[4] ≅ (ℤ/4)² — N13 at n = 4, the first composite torsion-structure case (secp256k1Bar_four_torsion_structure: the closure doubling formula supplies s…
Ecdlp.Curve.secp256k1Bar_two_nsmul_coords, Ecdlp.Curve.secp256k1Bar_four_nsmul_eq_zero_iff, Ecdlp.Curve.secp256k1Bar_four_torsion_ncard, Ecdlp.Curve.secp256k1Bar_four_torsion_card, Ecdlp.Curve.secp256k1Bar_torsionBy_four_card, Ecdlp.Curve.secp256k1Bar_four_torsion_structure, Ecdlp.Torsion.nonempty_addEquiv_zmod_four_prod_of_card_and_two_torsion
Full ledger claim and scope
#E[4](𝔽̄_p) = 16` and `E[4] ≅ (ℤ/4)²` — N13 at `n = 4`, the first composite torsion-structure case (`secp256k1Bar_four_torsion_structure`: the closure doubling formula supplies `secp256k1Bar_two_nsmul_coords`; the closure bridge gives `4•P=0 ⟺ ψ₄(P)=0`; the explicit split `E[4]=E[2] ⊔ P₄` counts `4 + 6·2 = 16`; the internal two-torsion is identified with ambient `E[2]`, hence has card 4; and `nonempty_addEquiv_zmod_four_prod_of_card_and_two_torsion` classifies the resulting finite abelian group. The result is existence of an additive equivalence, not a canonical basis. Honest scope: concrete `n=4` only; the uniform composite-`n` theorem remains open)
- Domain
- ecdlp-ledger
- Method
- closure doubling + division-polynomial bridge + separability/coprimality + finite-set card algebra + composite-order classification
#E[5](𝔽̄_p) = 25 and E[5] ≅ (ℤ/5)² — N13 at n = 5 (secp256k1Bar_five_torsion_structure + the closure bridge secp256k1Bar_five_nsmul_eq_zero_iff (FiveTorsionBridgeBar.lea…
Ecdlp.Curve.secp256k1Bar_five_torsion_structure, secp256k1Bar_five_nsmul_eq_zero_iff, secp256k1Bar_five_torsion_ncard
Full ledger claim and scope
#E[5](𝔽̄_p) = 25` and `E[5] ≅ (ℤ/5)²` — N13 at `n = 5` (`secp256k1Bar_five_torsion_structure` + the closure bridge `secp256k1Bar_five_nsmul_eq_zero_iff` (`FiveTorsionBridgeBar.lean`, token-identical port of the `𝔽_p` five-bridge incl. `five_core`): the 5-torsion set equals `{O} ∪ {(x, ±y) : preΨ₅(x) = 0}` — 12 distinct roots (separability certificates) × 2 + O = 25 = 5²; `y ≠ 0` via `Ψ₂Sq ⊥ preΨ₅`; N10(iii) classifies. Replication of the E[3] pattern)
- Domain
- ecdlp-ledger
- Method
- E[3] pattern + separability + `Ψ₂Sq⊥preΨ₅` + N10(iii)
#E[7](𝔽̄_p) = 49 and E[7] ≅ (ℤ/7)² — N13 at n = 7 (secp256k1Bar_seven_torsion_structure + the closure bridge secp256k1Bar_seven_nsmul_eq_zero_iff (SevenTorsionBridgeBar.…
Ecdlp.Curve.secp256k1Bar_seven_torsion_structure, secp256k1Bar_seven_nsmul_eq_zero_iff, secp256k1Bar_seven_torsion_ncard
Full ledger claim and scope
#E[7](𝔽̄_p) = 49` and `E[7] ≅ (ℤ/7)²` — N13 at `n = 7` (`secp256k1Bar_seven_torsion_structure` + the closure bridge `secp256k1Bar_seven_nsmul_eq_zero_iff` (`SevenTorsionBridgeBar.lean`, token-identical port of `seven_master`/`seven_core`): 24 distinct `preΨ₇` roots × 2 + O = 49 = 7²; `y ≠ 0` via the new `Ψ₂Sq ⊥ preΨ₇` certificate; N10(iii) classifies. The N13 instance family is now `n ∈ {3, 5, 7}` — every odd prime with a landed torsion bridge; the general-`n` theorem remains the open program (separability/N10 general core))
- Domain
- ecdlp-ledger
- Method
- E[3] pattern + separability + `Ψ₂Sq⊥preΨ₇` + N10(iii)
#E[n] ≤ n² point-cardinality bound for secp256k1 (secp256k1_{three,five,seven}_torsion_card_le: Nat.card {P // n•P = 0} ≤ n² for n = 3,5,7 — i.e.
Ecdlp.Curve.secp256k1_{three,five,seven}_torsion_card_le
Full ledger claim and scope
#E[n] ≤ n²` point-cardinality bound for secp256k1 (`secp256k1_{three,five,seven}_torsion_card_le`: `Nat.card {P // n•P = 0} ≤ n²` for n = 3,5,7 — i.e. ≤ 9 / 25 / 49 torsion points; upgrades the earlier x-*coordinate* count to a genuine point count, converting an asserted-but-unproven docstring claim into a kernel-checked theorem via a ≤2-to-1 fiber argument + the division-polynomial degree bounds. Dodges the point-counting barrier: an upper bound needs no exact `#E(𝔽ₚ)` computation)
- Domain
- ecdlp-ledger
- Method
- the bridges + Mathlib (`card_roots'`, `Finset.card_le_mul_card_image`, `Set.ncard_insert_le`)
alternate/supporting · Semaev S₃ full symmetry — S₃_symm₁₂ (swap x₁,x₂) and S₃_symm₂₃ (swap x₂,x₃), so S₃ is symmetric in all three x-arguments, as a summation pol…
Ecdlp.Semaev.S₃_symm₁₂, S₃_symm₂₃
Full ledger claim and scope
*(alternate/supporting)* Semaev `S₃` full symmetry — `S₃_symm₁₂` (swap `x₁,x₂`) and `S₃_symm₂₃` (swap `x₂,x₃`), so `S₃` is symmetric in all three `x`-arguments, as a summation polynomial must be
- Domain
- ecdlp-ledger
- Method
- Mathlib (`ring`)
alternate/supporting · S₄ infrastructure — the S₃-as-polynomial bridge S₃poly_eval ((S₃poly …).eval x₃ = S₃ …) and S₄'s full symmetry: block swap S₄_block_swap (x₁,…
Ecdlp.Semaev.S₃poly_eval, S₄_block_swap, S₄_symm₁₂, S₄_symm₃₄
Full ledger claim and scope
*(alternate/supporting)* `S₄` infrastructure — the `S₃`-as-polynomial bridge `S₃poly_eval` (`(S₃poly …).eval x₃ = S₃ …`) and `S₄`'s full symmetry: block swap `S₄_block_swap` `(x₁,x₂)↔(x₃,x₄)` (from `resultant_comm`) and within-pair `S₄_symm₁₂`, `S₄_symm₃₄` — so `S₄` is symmetric on all of `{x₁,x₂,x₃,x₄}`, the symmetry a summation polynomial must have
- Domain
- ecdlp-ledger
- Method
- Mathlib
alternate/supporting, n=3 bridge · concrete iff 3•P=0 ⟺ 3x⁴+84x=0 (secp256k1_three_nsmul_eq_zero_iff_poly), root-form iff (secp256k1_three_nsmul_eq_zero_iff_eval), Ψ₃/to…
Ecdlp.Curve.*
Full ledger claim and scope
*(alternate/supporting, n=3 bridge)* concrete iff `3•P=0 ⟺ 3x⁴+84x=0` (`secp256k1_three_nsmul_eq_zero_iff_poly`), root-form iff (`secp256k1_three_nsmul_eq_zero_iff_eval`), `Ψ₃`/torsion-poly eval lemmas (`secp256k1_Ψ₃_eval`, `secp256k1_eval_threeTorsionPoly`), point↦root map (`secp256k1_three_torsion_x_mem_Ψ₃_roots`), its set form (`secp256k1_threeTorsionX_subset_Ψ₃_roots`), and the dedup card bound (`secp256k1_Ψ₃_roots_toFinset_card_le`)
- Domain
- ecdlp-ledger
- Method
- bridge + Mathlib
alternate/supporting, n=5 bridge · the core x(2P)=x(3P) ⟺ ψ₅=0 field-algebra identity (five_core) and the concrete eval lemmas secp256k1_preΨ₄_eval (= 2x⁶+280x³−784), s…
Ecdlp.Curve.*
Full ledger claim and scope
*(alternate/supporting, n=5 bridge)* the core `x(2P)=x(3P) ⟺ ψ₅=0` field-algebra identity (`five_core`) and the concrete eval lemmas `secp256k1_preΨ₄_eval` (`= 2x⁶+280x³−784`), `secp256k1_psi2_evalEval` (`= 2y`)
- Domain
- ecdlp-ledger
- Method
- Mathlib + `linear_combination
alternate/supporting, n=7 bridge · the core slope-algebra certificate seven_master (G·(ℓ₂²−3x)⁶·(2y)¹² = −4(x³+7)·ψ₇) and the x(3P)=x(4P) ⟺ ψ₇=0 step seven_core
Ecdlp.Curve.*
Full ledger claim and scope
*(alternate/supporting, n=7 bridge)* the core slope-algebra certificate `seven_master` (`G·(ℓ₂²−3x)⁶·(2y)¹² = −4(x³+7)·ψ₇`) and the `x(3P)=x(4P) ⟺ ψ₇=0` step `seven_core
- Domain
- ecdlp-ledger
- Method
- Mathlib + `linear_combination
alternate/supporting, order classification · the reusable order-upgrade lemma addOrderOf_eq_of_prime_nsmul (prime ℓ: addOrderOf P = ℓ ⟺ ℓ•P=0 for nonzero P) and concrete…
Ecdlp.Curve.*
Full ledger claim and scope
*(alternate/supporting, order classification)* the reusable order-upgrade lemma `addOrderOf_eq_of_prime_nsmul` (prime `ℓ`: `addOrderOf P = ℓ ⟺ ℓ•P=0` for nonzero `P`) and concrete-poly corollaries `secp256k1_addOrderOf_three_iff_poly` (`= 3 ⟺ 3x⁴+84x=0`), `secp256k1_addOrderOf_five_iff_poly` (`= 5 ⟺ 5x¹²+…=0`)
- Domain
- ecdlp-ledger
- Method
- Mathlib + the bridges
alternate/supporting, point count · Set.ncard carrier forms secp256k1_{three,five,seven}_torsion_ncard_le; the fiber/curve machinery px/py/secp256k1_curve_of_nonsingula…
Ecdlp.Curve.*
Full ledger claim and scope
*(alternate/supporting, point count)* `Set.ncard` carrier forms `secp256k1_{three,five,seven}_torsion_ncard_le`; the fiber/curve machinery `px`/`py`/`secp256k1_curve_of_nonsingular`; concrete degree-12/24 polynomials `Q5`/`Q7` with `_eval`/`_natDegree_le`/`_ne_zero`; and x-root-membership `secp256k1_{five,seven}_torsion_x_mem
- Domain
- ecdlp-ledger
- Method
- Mathlib + the bridges
alternate/supporting, this batch · Shamir polynomial-identity form shamir_reconstruct_poly; the GLV E[n]-self-map secp256k1_glvPoint_mapsTo_torsion; and the simple-group p…
Ecdlp.*
Full ledger claim and scope
*(alternate/supporting, this batch)* Shamir polynomial-identity form `shamir_reconstruct_poly`; the GLV `E[n]`-self-map `secp256k1_glvPoint_mapsTo_torsion`; and the simple-group packaging `secp256k1_scalar_isSimpleAddGroup
- Domain
- ecdlp-ledger
- Method
- Mathlib
instantiation, multiparty protocols · the same concrete-⟨G⟩ realization for the multi-signer / threshold protocols — aggregate Schnorr / Taproot multisig secp256k1_threshold_…
Ecdlp.Curve.secp256k1_threshold_schnorr_aggregate, secp256k1_musig_key_aggregate, secp256k1_feldman_vss_verify, secp256k1_threshold_elgamal_combine, secp256k1_schnorr_batch_verify
Full ledger claim and scope
*(instantiation, multiparty protocols)* the same concrete-`⟨G⟩` realization for the multi-signer / threshold protocols — aggregate Schnorr / Taproot multisig `secp256k1_threshold_schnorr_aggregate` (MuSig/FROST), MuSig2 key aggregation `secp256k1_musig_key_aggregate`, Feldman VSS share verification `secp256k1_feldman_vss_verify` (DKG), threshold ElGamal partial-decryption combination `secp256k1_threshold_elgamal_combine`, batch Schnorr verification `secp256k1_schnorr_batch_verify
- Domain
- ecdlp-ledger
- Method
- instantiation of `Ecdlp.Schnorr.*` on `↥⟨G⟩
secp256k1 instantiation · the same global descent over 𝔽̄_p for secp256k1 (secp256k1Bar := secp256k1.map (algebraMap _ _)): a non-coprimality of Φ n/ΨSq n over 𝔽_p pro…
Ecdlp.Curve.secp256k1_exists_normEDS_consecutive_eq_zero_of_not_isCoprime
Full ledger claim and scope
*(secp256k1 instantiation)* the same global descent over `𝔽̄_p` for secp256k1 (`secp256k1Bar := secp256k1.map (algebraMap _ _)`): a non-coprimality of `Φ n`/`ΨSq n` over `𝔽_p` produces consecutive `normEDS` zeros over `𝔽̄_p` — the N5 obligation for secp256k1 reduced to the scalar sequence
- Domain
- ecdlp-ledger
- Method
- the generic descent, instantiated
supporting, conditional all-index frontier · Integral division-resultant transport and the exact missing geometric bridge (secp256k1_resultant_eq_intCast proves that every fix…
Ecdlp.Curve.secp256k1_isCoprime_preΨ'_odd_primes_of_integral_resultant_bad_prime_support, Ecdlp.Curve.secp256k1_isCoprime_preΨ'_odd_primes_of_torsion_bridge
Full ledger claim and scope
*(supporting, conditional all-index frontier)* Integral division-resultant transport and the exact missing geometric bridge (`secp256k1_resultant_eq_intCast` proves that every fixed-size integral resultant commutes with reduction; universal bad-prime support implies `IsCoprime` for every pair of distinct odd primes; independently, the exact algebraic-closure root-to-torsion proposition implies the same theorem. Both universal premises remain explicit `def : Prop` inputs, not global assumptions; unconditional all-index support remains open)
- Domain
- ecdlp-ledger
- Method
- Mathlib resultant/map + existing common-root bridge + torsion-order gcd
11-division polynomial is nonzero (deg 60 ⇒ preΨ' 11 ≠ 0; its root multiset in 𝔽_p is well-defined and finite)
Ecdlp.Curve.secp256k1_preΨ₁₁_ne_zero
Full ledger claim and scope
11-division polynomial is nonzero (deg 60 ⇒ `preΨ' 11 ≠ 0`; its root multiset in `𝔽_p` is well-defined and finite)
- Domain
- ecdlp-ledger
- Method
- Mathlib
13-division polynomial is nonzero (deg 84 ⇒ preΨ' 13 ≠ 0; its root multiset in 𝔽_p is well-defined and finite)
Ecdlp.Curve.secp256k1_preΨ₁₃_ne_zero
Full ledger claim and scope
13-division polynomial is nonzero (deg 84 ⇒ `preΨ' 13 ≠ 0`; its root multiset in `𝔽_p` is well-defined and finite)
- Domain
- ecdlp-ledger
- Method
- Mathlib
2-torsion x-coordinate ⇒ root of Ψ₂Sq (division-polynomial↔torsion, rung 4 forward)
Ecdlp.Curve.secp256k1_Ψ₂Sq_root_of_two_torsion
Full ledger claim and scope
2-torsion `x`-coordinate ⇒ root of `Ψ₂Sq` (division-polynomial↔torsion, rung 4 forward)
- Domain
- ecdlp-ledger
- Method
- Mathlib
3-torsion x-coordinate set is finite (secp256k1_threeTorsionX_finite: the set threeTorsionX = {x | ∃ y h, 3•(x,y)=0} of x-coordinates of nonzero 3-torsion points is finite…
Ecdlp.Curve.secp256k1_threeTorsionX_finite
Full ledger claim and scope
3-torsion `x`-coordinate set is finite (`secp256k1_threeTorsionX_finite`: the set `threeTorsionX = {x | ∃ y h, 3•(x,y)=0}` of `x`-coordinates of nonzero 3-torsion points is finite — via the bridge it embeds into the roots of `Ψ₃`)
- Domain
- ecdlp-ledger
- Method
- bridge + Mathlib (`Set.Finite.subset`, `Multiset.toFinset`)
ECDLP
Kernel + compiler
#
3-torsion bridge over 𝔽̄_p: 3•P=0 ⟺ ψ₃(P)=0 (secp256k1Bar_three_nsmul_eq_zero_iff: for a nonsingular affine P on secp256k1Bar over K=AlgebraicClosure (ZMod p), 3•P=0…
Ecdlp.Curve.secp256k1Bar_three_nsmul_eq_zero_iff
Full ledger claim and scope
3-torsion bridge over `𝔽̄_p`: `3•P=0 ⟺ ψ₃(P)=0` (`secp256k1Bar_three_nsmul_eq_zero_iff`: for a nonsingular affine `P` on `secp256k1Bar` over `K=AlgebraicClosure (ZMod p)`, `3•P=0 ↔ (ψ 3).evalEval P = 0 ↔ 3x⁴+84x=0` — the per-point `n=3` division-poly↔torsion equivalence over the closure (node N11@3), the `𝔽̄_p` port of `ThreeTorsionBridge.lean`. Per-point iff only; the surjectivity-onto-roots, `#E[3]=9` count, and group structure are downstream, not here. No `native_decide`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Affine` group law, `map_Ψ₃`, `evalEval`) + `𝔽_p`→`𝔽̄_p` template port
5-division polynomial is nonzero (deg 12 ⇒ ψ₅≠0; 5-torsion x-coords are a proper finite set)
Ecdlp.Curve.secp256k1_preΨ₅_ne_zero
Full ledger claim and scope
5-division polynomial is nonzero (deg 12 ⇒ `ψ₅≠0`; 5-torsion `x`-coords are a proper finite set)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
5-torsion bridge over 𝔽̄_p: 5•P=0 ⟺ ψ₅(P)=0 (secp256k1Bar_five_nsmul_eq_zero_iff: for a nonsingular affine P on secp256k1Bar, 5•P=0 ↔ (ψ 5).evalEval P = 0 — per-point…
Ecdlp.Curve.secp256k1Bar_five_nsmul_eq_zero_iff
Full ledger claim and scope
5-torsion bridge over `𝔽̄_p`: `5•P=0 ⟺ ψ₅(P)=0` (`secp256k1Bar_five_nsmul_eq_zero_iff`: for a nonsingular affine `P` on `secp256k1Bar`, `5•P=0 ↔ (ψ 5).evalEval P = 0` — per-point `n=5` bridge over the closure (N11@5), `𝔽̄_p` port of `FiveTorsionBridge.lean`; the module also proves the `2•P=0 ⟺ y=0` half. Per-point iff only; `#E[5]=25`/group downstream. No `native_decide`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Affine` group law, `map_preΨ₄`/`ψ_odd`, `evalEval`) + template port
7-division polynomial is nonzero (deg 24 ⇒ ψ₇≠0; 7-torsion x-coords are a proper finite set)
Ecdlp.Curve.secp256k1_preΨ₇_ne_zero
Full ledger claim and scope
7-division polynomial is nonzero (deg 24 ⇒ `ψ₇≠0`; 7-torsion `x`-coords are a proper finite set)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
7-torsion bridge over 𝔽̄_p: 7•P=0 ⟺ ψ₇(P)=0 (secp256k1Bar_seven_nsmul_eq_zero_iff: for a nonsingular affine P on secp256k1Bar, 7•P=0 ↔ (ψ 7).evalEval P = 0 — per-point…
Ecdlp.Curve.secp256k1Bar_seven_nsmul_eq_zero_iff
Full ledger claim and scope
7-torsion bridge over `𝔽̄_p`: `7•P=0 ⟺ ψ₇(P)=0` (`secp256k1Bar_seven_nsmul_eq_zero_iff`: for a nonsingular affine `P` on `secp256k1Bar`, `7•P=0 ↔ (ψ 7).evalEval P = 0` — per-point `n=7` bridge over the closure (N11@7), `𝔽̄_p` port of `SevenTorsionBridge.lean`. Per-point iff only; `#E[7]=49`/group downstream. No `native_decide`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Affine` group law, `ψ_odd`, `evalEval`) + master-cert `linear_combination
ECDLP
Kernel + compiler
#
7 is a quadratic non-residue modulo p; no affine secp256k1 point over 𝔽_p has x=0 (secp256k1_seven_not_isSquare: Euler's criterion contradicts the closed witness 7^(p/2)…
Ecdlp.Curve.secp256k1_seven_ne_zero, secp256k1_seven_pow_ne_one, secp256k1_seven_not_isSquare, secp256k1_x_ne_zero
Full ledger claim and scope
7` is a quadratic non-residue modulo `p`; no affine secp256k1 point over `𝔽_p` has `x=0` (`secp256k1_seven_not_isSquare`: Euler's criterion contradicts the closed witness `7^(p/2) ≠ 1`; `secp256k1_x_ne_zero`: substituting `x=0` into `y²=x³+7` would exhibit `7` as a square)
- Domain
- ecdlp-ledger
- Method
- ZMod.euler_criterion` + `native_decide` witness + curve equation
A rational point is a closed point (maximal ideal) (xyIdeal_isMaximal: for (x,y) on any Weierstrass curve over a field, the ideal ⟨X−x, Y−y⟩ of F[E] is maximal — since the…
Ecdlp.Weil.xyIdeal_isMaximal
Full ledger claim and scope
A rational point is a closed point (maximal ideal) (`xyIdeal_isMaximal`: for `(x,y)` on any Weierstrass curve over a field, the ideal `⟨X−x, Y−y⟩` of `F[E]` is maximal — since the quotient `F[E]/⟨X−x,Y−y⟩ ≃ F` is a field. Establishes each `F`-rational point as a closed point of the affine curve; the prerequisite for localizing at `P` (the local ring `F[E]_P`) to evaluate rational functions regular at `P` — the next infrastructure rung toward the Weil pairing's `f_P(D_Q)`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Ideal.Quotient.maximal_of_isField`, `MulEquiv.isField`)
Adaptor signature witness extraction (atomic swaps / Lightning)
Ecdlp.Schnorr.adaptor_extract
- Domain
- ecdlp-ledger
- Method
- Mathlib
Affine Weierstrass points are finite over any finite ring — general lemma (Mathlib-gap upstream candidate) (instFinitePoint: Finite W.Point for every W : WeierstrassCurve.Aff…
WeierstrassCurve.Affine.instFinitePoint
Full ledger claim and scope
Affine Weierstrass points are finite over any finite ring — general lemma (Mathlib-gap upstream candidate) (`instFinitePoint`: `Finite W.Point` for every `W : WeierstrassCurve.Affine R` with `[CommRing R] [Finite R]`, via `Point ↪ Option (R × R)`. Weakest hypotheses — no `Field`/`Nontrivial`. Mathlib v4.31.0 has no `Finite`/`Fintype` instance on any `Point` variant (gap confirmed against pinned source); natural upstream home `Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Point.lean`. Subsumes the two per-curve instances below, now one-line `inferInstance` corollaries. Pure-kernel)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Finite.of_injective`)
Aggregate Schnorr verification (MuSig/FROST/Taproot multisig)
Ecdlp.Schnorr.threshold_schnorr_aggregate
- Domain
- ecdlp-ledger
- Method
- Mathlib
Blind Schnorr signature unblinding (e-cash)
Ecdlp.Schnorr.blind_unblind
- Domain
- ecdlp-ledger
- Method
- Mathlib
Bounded decomposition fan-out (index-calculus cost ingredient) (secp256k1_decomposition_completions_le_two: fixing a base coordinate x₁ and the target x_R with x₁ ≠ x_R, a…
Ecdlp.Semaev.secp256k1_decomposition_completions_le_two
Full ledger claim and scope
Bounded decomposition fan-out (index-calculus cost ingredient) (`secp256k1_decomposition_completions_le_two`: fixing a base coordinate `x₁` and the target `x_R` with `x₁ ≠ x_R`, at most 2 field elements `x₂` complete a 2-decomposition `S₃(x₁,x₂,x_R)=0` — any finite set of completions has card `≤ 2`. A degree-2 polynomial over a field has `≤ 2` roots, so the index-calculus relation graph has bounded fan-out at each factor-base point. The one exact, kernel-checked quantitative fact under the prime-field cost analysis — *not* the hardness claim itself, which stays an open conjecture; see `BARRIERS.md`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Polynomial.card_roots'`, `Multiset.toFinset_card_le`)
Chaum–Pedersen DLEQ (equality of discrete logs) — completeness
Ecdlp.DLEQ.chaum_pedersen_verify
- Domain
- ecdlp-ledger
- Method
- Mathlib
Common root ⇒ consecutive normEDS zeros (local descent) (over an integral domain, if ΨSq n and Φ n both vanish at x₀ then w n = 0 and w(n−1) = 0 ∨ w(n+1) = 0: ΨSq = w…
Ecdlp.Curve.normEDS_consecutive_eq_zero_of_eval_eq_zero
Full ledger claim and scope
Common root ⇒ consecutive `normEDS` zeros (local descent) (over an integral domain, if `ΨSq n` and `Φ n` both vanish at `x₀` then `w n = 0` and `w(n−1) = 0 ∨ w(n+1) = 0`: `ΨSq = w²` kills `w n`, then `Φ = x·w² − w₊w₋` collapses and a domain has no zero divisors; node N5 local step)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`pow_eq_zero_iff`, `mul_eq_zero`) + the eval bridge
ECDLP
Kernel + compiler
#
Compressed division polynomials — cube-covariance structural core + m∈{3,5,7} forms (cube_covariant_support/exists_comp_X_pow_of_invariant/exists_X_mul_comp_of_covariant:…
Ecdlp.Curve.cube_covariant_support, exists_comp_X_pow_of_invariant, exists_X_mul_comp_of_covariant, secp256k1_Ψ₃_compressed, secp256k1_preΨ₅_compressed, secp256k1_preΨ₇_compressed, secp256k1_preΨ₉_natDegree
Full ledger claim and scope
Compressed division polynomials — cube-covariance structural core + `m∈{3,5,7}` forms (`cube_covariant_support`/`exists_comp_X_pow_of_invariant`/`exists_X_mul_comp_of_covariant`: over any field with a primitive cube root `β`, `p(βX)=c·p(X)` forces every support exponent `k` to satisfy `β^k=c`, hence `c=1 ⇒ p∈F[X³]` and `c=β ⇒ p∈X·F[X³]` with the matching `deg` drop — the foundation-free structural heart. Applied unconditionally to secp256k1's concrete forms: `Ψ₃=X·R₃(X³)` (`deg R₃=1`), `preΨ₅=R₅(X³)` (`deg R₅=4`), `preΨ₇=R₇(X³)` (`deg R₇=8`), plus the new bare degree `deg preΨ₉=40`. For `m∈{9,11,13}` the compressed form is stated conditional on the polynomial-level `β`-covariance of `ψ_m` (`preΨ'_compressed_of_{invariant,covariant}`) — the isolated missing lemma (repo has only the `eval`-level covariance, `m∈{3,5,7}`). Concrete forms inherit `Lean.ofReduceBool` from `native_decide` degree facts; the structural core does not. Drafted with the Kimi K3 proof-drafter, kernel-verified in CI)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Polynomial.expand`/`contract`/`comp`) + repo concrete `ψ_m` forms + `natDegree_preΨ'
ECDLP
Kernel + compiler
#
Conditional propagation of isolated infinity slots and exact balanced single-affine-chart reduction (under affine external inputs and nonzero endpoint determinants, distance-two i…
Ecdlp.FrozenProjectiveSemaev.frozenChartSystem_gapTwoInfinity_forces_det_zero, frozenChartCover_iff_gapTwoInteriorChartCover, card_gapTwoInteriorInfinityMask, frozenChartSystem_gapThreeInfinity_forces_HValue_zero, frozenChartCover_iff_gapThreeInteriorChartCover, card_gapThreeInteriorInfinityMask, frozenChartSystem_slotOneInfinity_forces_HValue_zero, frozenChartSystem_slotTwelveInfinity_forces_HValue_zero, frozenChartCover_iff_boundaryPropagatedChartCover, card_boundaryPropagatedInfinityMask, frozenChartCover_iff_boundaryGapThreeChartCover, card_boundaryGapThreeInfinityMask, specializeOver_frozenC_eq_zero_of_projectiveChain, propagatedPrefixValue_zero, balancedSuffixValue_zero, frozenChartSystem_internalInfinity_forces_prefix_zero, frozenChartSystem_balancedSuffixInfinity_forces_zero, frozenChartSystem_balancedPropagatedRegular_mask_eq_empty, frozenChartCover_iff_affineChartCover_of_balancedPropagatedRegular, frozenChartPolynomialCover_iff_affine_of_balancedPropagatedRegular, frozenRecS17_iff_affineChartPolynomialCover_over_of_balancedPropagatedRegular and supporting declarations
Full ledger claim and scope
Conditional propagation of isolated infinity slots and exact balanced single-affine-chart reduction (under affine external inputs and nonzero endpoint determinants, distance-two infinity pairs force explicit consecutive-input projective determinants and reduce the 377 interior separated masks to 129 under the named uniform determinant guards. Distance-three pairs force literal three-input `HValue` equations, giving 69 masks; adding the two boundary-near `HValue` guards gives 36. The independent boundary-only branch gives 60 from 129 and is not a distance-three result. Every internal infinity slot also forces an explicit lower-stage frozen prefix or suffix specialization to vanish. Six prefix and six suffix obstructions cover slots 1 through 12 with maximum frozen stage five. A projective frozen chain implies the corresponding frozen specialization over any field, so affine inputs, nonzero endpoints, and pointwise nonzero balanced obstructions force the infinity mask to be empty and make both the full chart cover and literal chart-polynomial cover exactly the single affine chart. After the existing injective algebraically closed base change, the source frozen stage-14 equation has the same conditional single-chart equivalence; target witnesses are not asserted to descend. Honest scope: the uniform local guards include endpoint-redundant cases and define a slightly smaller locus than the maximal one. Symbolic nonzeroness, nonemptiness, density, probability, and genericity of the balanced regular locus are not proved. One chart does not mean one witness, one relation, independent relations, solver readiness, improved yield or rank, lower solving degree, reduced memory/runtime/total cost, exact-target computation, reduced ECDLP complexity, or an ECDLP attack. The four mask cardinalities `129/69/60/36` are compiler-trusted through `native_decide`; the propagation, one-way resultant, mask-empty, cover-equivalence, and source-bridge theorems use the standard Lean/Mathlib trust base)
- Domain
- ecdlp-ledger
- Method
- exact local substitution + fixed-degree projective-resultant forward implication + balanced prefix/suffix frozen specializations + exact chart-cover restriction; `native_decide` only for the four mask cardinalities
ECDLP
Kernel + compiler
#
Coordinate-ring translation φₙ·ΨSqₙ = Φₙ·ψₙ² (N7-uniform S1 brick, curve-generic) (mk_ψ_sq: mk W (ψ n)² = mk W (C (ΨSq n)), and mk_φ_mul_ΨSq: mk W (φ n)·mk W (C (ΨSq n))…
Ecdlp.Curve.mk_ψ_sq, mk_φ_mul_ΨSq
Full ledger claim and scope
Coordinate-ring translation `φₙ·ΨSqₙ = Φₙ·ψₙ²` (N7-uniform S1 brick, curve-generic) (`mk_ψ_sq`: `mk W (ψ n)² = mk W (C (ΨSq n))`, and `mk_φ_mul_ΨSq`: `mk W (φ n)·mk W (C (ΨSq n)) = mk W (C (Φ n))·mk W (ψ n)²` in the affine coordinate ring `W.CoordinateRing` of an arbitrary Weierstrass curve `W` over any `CommRing R`, all `n : ℤ` — the algebraic link between the *bivariate* division polynomials `φₙ/ψₙ²` that compute `x([n]•P)` on points and the *univariate* `Φₙ/ΨSqₙ` whose degrees Mathlib supplies. Two-step rewrites over Mathlib's own congruences `mk_ψ`/`mk_Ψ_sq`/`mk_φ`. Honest scope: coordinate-ring identity only — the Point-level statement `x([n]•P)=φₙ(P)/ψₙ(P)²` on `E(k)` needs the multiplication-by-`n` coordinate map (absent from Mathlib) and is not claimed here; this is the substrate that step consumes, first brick of the N7-uniform build (`BARRIERS.md §B3`). No `native_decide`, no new axioms)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`WeierstrassCurve.Affine.CoordinateRing.mk_ψ`/`mk_Ψ_sq`/`mk_φ`)
ECDLP
Kernel + compiler
#
Curve25519 base point on curve; constants validated (Curve25519_generator_equation: the RFC 7748 base point u=9 satisfies the Montgomery equation in 𝔽_p — one native_decide…
Ecdlp.Curve25519.Curve25519_generator_equation
Full ledger claim and scope
Curve25519 base point on curve; constants validated (`Curve25519_generator_equation`: the RFC 7748 base point `u=9` satisfies the Montgomery equation in `𝔽_p` — one `native_decide` validating `p`, `A`, `Gu`, `Gv` together; a rational point of the Mathlib curve)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
Curve25519 is Montgomery, not short Weierstrass (Curve25519_a₂_ne_zero: a₂=486662≠0, the u² coefficient — a structural contrast with secp256k1/P-256 (a₂=0); with cofactor…
Ecdlp.Curve25519.Curve25519_a₂_ne_zero
Full ledger claim and scope
Curve25519 is Montgomery, not short Weierstrass (`Curve25519_a₂_ne_zero`: `a₂=486662≠0`, the `u²` coefficient — a structural contrast with secp256k1/P-256 (`a₂=0`); with cofactor 8 (vs. prime order), shows the formalization is tied to neither curve *shape* nor prime order)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
Curve25519 is a genuine elliptic curve (Montgomery model) (Curve25519_Δ_ne_zero + IsElliptic: v²=u³+486662u²+u over 𝔽_p, p=2²⁵⁵−19, discriminant a unit — a third curve,…
Ecdlp.Curve25519.Curve25519_Δ_ne_zero (+ instance : Curve25519.IsElliptic)
Full ledger claim and scope
Curve25519 is a genuine elliptic curve (Montgomery model) (`Curve25519_Δ_ne_zero` + `IsElliptic`: `v²=u³+486662u²+u` over `𝔽_p`, `p=2²⁵⁵−19`, discriminant a unit — a third curve, and a *different model*: the same Mathlib EC group law now covers a Montgomery-form, non-short-Weierstrass curve, under `[Fact p.Prime]`)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
Dependence relation recovers the discrete log (jacobson_xedni_dependence_recovers_log: for Q = x•P in any AddCommGroup, a nontrivial integer relation a•P + b•Q = 0 with b…
Ecdlp.jacobson_xedni_dependence_recovers_log
Full ledger claim and scope
Dependence relation recovers the discrete log (`jacobson_xedni_dependence_recovers_log`: for `Q = x•P` in any `AddCommGroup`, a nontrivial integer relation `a•P + b•Q = 0` with `b` a unit mod `n = addOrderOf P` pins the discrete log `x ≡ -a·b⁻¹ (mod n)` — the neutral algebraic core of the Jacobson–Xedni point-dependence idea; Layer-3 generated from corpus claim `jacobson-xedni-dependence-recovers-log-003`, closed via `addOrderOf_dvd_iff_zsmul_eq_zero` + `ZMod` arithmetic)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`addOrderOf_dvd_iff_zsmul_eq_zero`, `ZMod.intCast_zmod_eq_zero_iff_dvd`, `Ring.inverse`)
Deployed signature/agreement protocols are correct on the concrete secp256k1 group (the abstract Ecdlp.Schnorr correctness theorems instantiated at the concrete carrier ↥⟨G⟩ w…
Ecdlp.Curve.secp256k1_dh_agree, secp256k1_schnorr_verify, secp256k1_taproot_tweak_verify, secp256k1_adaptor_complete
Full ledger claim and scope
Deployed signature/agreement protocols are correct on the concrete secp256k1 group (the abstract `Ecdlp.Schnorr` correctness theorems instantiated at the concrete carrier `↥⟨G⟩` with base point `secp256k1Gₙ`, about genuine curve points: Diffie–Hellman agreement `secp256k1_dh_agree`, Schnorr/EdDSA verification `secp256k1_schnorr_verify`, Bitcoin Taproot key-tweak `secp256k1_taproot_tweak_verify` (BIP-341), adaptor-signature completeness `secp256k1_adaptor_complete` (atomic swaps / Lightning PTLCs). Contingent only on `ord(G) = n` + the abstract algebra — the honest content: the real secp256k1 protocols verify on the actual curve subgroup, not only an abstract module)
- Domain
- ecdlp-ledger
- Method
- instantiation of `Ecdlp.Schnorr.*` on `↥⟨G⟩
Diffie–Hellman key agreement correctness
Ecdlp.Schnorr.dh_agree
- Domain
- ecdlp-ledger
- Method
- Mathlib
Distinct points ⇒ distinct closed points (full separation) (xyIdeal_ne_of_ne: for rational points (x₁,y₁) ≠ (x₂,y₂) on a Weierstrass curve the maximal ideals ⟨X−x, Y−y⟩ diff…
Ecdlp.Weil.xyIdeal_ne_of_ne (+ xyIdeal_ne_of_y_ne)
Full ledger claim and scope
Distinct points ⇒ distinct closed points (full separation) (`xyIdeal_ne_of_ne`: for rational points `(x₁,y₁) ≠ (x₂,y₂)` on a Weierstrass curve the maximal ideals `⟨X−x, Y−y⟩` differ — combining the x-coordinate case with the `YClass` companion `xyIdeal_ne_of_y_ne` (`y₁ ≠ y₂ ⇒` distinct ideals, same unit-in-a-maximal-ideal argument on `Y − ·`). The complete divisor-support-separation lemma for the Weil pairing: any two distinct rational points are distinct closed points of `F[E]`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Ideal.eq_top_of_isUnit_mem`, `Ideal.subset_span`)
Distinct x-coordinates ⇒ distinct closed points (xyIdeal_ne_of_x_ne: rational points on a Weierstrass curve with x₁ ≠ x₂ give different maximal ideals ⟨X−x, Y−y⟩ of F[E].
Ecdlp.Weil.xyIdeal_ne_of_x_ne
Full ledger claim and scope
Distinct x-coordinates ⇒ distinct closed points (`xyIdeal_ne_of_x_ne`: rational points on a Weierstrass curve with `x₁ ≠ x₂` give different maximal ideals `⟨X−x, Y−y⟩` of `F[E]`. Proof: `XClass x₁ − XClass x₂ = algebraMap F F[E] (x₂−x₁)` is a unit when `x₁ ≠ x₂`; equal ideals would force that unit into a maximal (proper) ideal — contradiction. The divisor-support separation the Weil pairing needs — the points of `D_Q` chosen to compute `f_P(D_Q)` must avoid `P`, `O`, which requires distinct points to be genuinely distinct closed points; scouted + proved on the warm-server loop)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Ideal.eq_top_of_isUnit_mem`, `Ideal.subset_span`, `IsUnit.map`)
ECDLP
Kernel + compiler
#
Division-polynomial doubling ψₙ ∣ ψ₂ₙ (N7-uniform S2 brick — the ω prerequisite, curve-generic) (ψ_two_mul: ψ₂ₖ = ψₖ · complEDS₂ ψ₂ (C Ψ₃) (C preΨ₄) k, and ψ_dvd_ψ_two_mul…
Ecdlp.Curve.ψ_two_mul, ψ_dvd_ψ_two_mul
Full ledger claim and scope
Division-polynomial doubling `ψₙ ∣ ψ₂ₙ` (N7-uniform S2 brick — the ω prerequisite, curve-generic) (`ψ_two_mul`: `ψ₂ₖ = ψₖ · complEDS₂ ψ₂ (C Ψ₃) (C preΨ₄) k`, and `ψ_dvd_ψ_two_mul`: `ψₖ ∣ ψ₂ₖ` in `R[X][Y]` for an arbitrary Weierstrass curve `W` over any `CommRing R`, all `k : ℤ` — the explicit factorisation making `ψ₂ₖ/ψₖ` a genuine polynomial. This is exactly the "as a start … `ψₙ` always divides `ψ₂ₙ`" step that Mathlib's own module docstring names as the first prerequisite for the (still-`TODO`) bivariate `y`-coordinate division polynomials `ωₙ := (ψ₂ₙ/ψₙ − ψₙ·(a₁φₙ + a₃ψₙ²))/2`. Because `W.ψ` is definitionally `normEDS ψ₂ (C Ψ₃) (C preΨ₄)` and Mathlib now carries the scalar 2-complement `complEDS₂`, the anticipated induction is a direct specialization. Honest scope: the `ψₙ∣ψ₂ₙ` divisibility only — `ωₙ` is not defined (needs the further `÷2` well-definedness, Mathlib's open `TODO`), and no `Point`-level `[n]`-arithmetic is claimed; S2 substrate the `ω`/`[n]`-map steps consume. No `native_decide`, no new axioms)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`normEDS_mul_complEDS₂`, `normEDS_dvd_normEDS_two_mul`, `complEDS₂`)
ECDLP
Kernel + compiler
#
Division-polynomial evaluation bridge — ΨSq/Φ at a point ↔ scalar normEDS (curve-generic, all n : ℤ: with β² = Ψ₂Sq(x₀) and w k := normEDS β (Ψ₃ x₀) (preΨ₄ x₀) k, (pr…
Ecdlp.Curve.eval_ΨSq_eq_normEDS_sq, eval_Φ_eq_normEDS, eval_preΨ_eq_preNormEDS
Full ledger claim and scope
Division-polynomial evaluation bridge — `ΨSq`/`Φ` at a point ↔ scalar `normEDS` (curve-generic, all `n : ℤ`: with `β² = Ψ₂Sq(x₀)` and `w k := normEDS β (Ψ₃ x₀) (preΨ₄ x₀) k`, `(preΨ n).eval x₀ = preNormEDS(β⁴)(Ψ₃ x₀)(preΨ₄ x₀) n`, `(ΨSq n).eval x₀ = w n²`, and `(Φ n).eval x₀ = x₀·w n² − w(n+1)·w(n−1)` — pure consequences of Mathlib's `preΨ`/`ΨSq`/`Φ` and `normEDS` twist conventions; nodes L2/L3 toward N10(i). Certificate `scripts/certs/eval_bridge_check.py` prints `CERT_OK`; no `native_decide`, no new axioms; curve-agnostic/upstreamable)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`map_preNormEDS`, `WeierstrassCurve.ΨSq`/`Φ`/`preΨ`, `normEDS`)
ECDSA known/leaked-nonce private-key recovery (ecdsa_known_nonce_recovers_key: s·k=z+r·x with known k, r≠0 ⇒ x=(sk−z)/r — the biased/leaked-nonce (HNP) scenario, distinc…
Ecdlp.Schnorr.ecdsa_known_nonce_recovers_key
Full ledger claim and scope
ECDSA known/leaked-nonce private-key recovery (`ecdsa_known_nonce_recovers_key`: `s·k=z+r·x` with known `k`, `r≠0` ⇒ `x=(sk−z)/r` — the biased/leaked-nonce (HNP) scenario, distinct from nonce-reuse)
- Domain
- ecdlp-ledger
- Method
- Mathlib field algebra
ECDSA nonce-reuse private-key recovery (ecdsa_nonce_reuse_recovers: two signatures sᵢ·k = zᵢ + r·x sharing nonce k, s₁≠s₂, r≠0 ⇒ k=(z₁−z₂)/(s₁−s₂) ∧ x=(s₁k−z₁)/r — the…
Ecdlp.Schnorr.ecdsa_nonce_reuse_recovers
Full ledger claim and scope
ECDSA nonce-reuse private-key recovery (`ecdsa_nonce_reuse_recovers`: two signatures `sᵢ·k = zᵢ + r·x` sharing nonce `k`, `s₁≠s₂`, `r≠0` ⇒ `k=(z₁−z₂)/(s₁−s₂) ∧ x=(s₁k−z₁)/r` — the exact algebra behind the Sony PS3 / Android-Bitcoin key thefts; stated over any field, no adversary/probability model)
- Domain
- ecdlp-ledger
- Method
- Mathlib field algebra (`field_simp`, `linear_combination`)
ECDLP
Kernel + compiler
#
ECDSA signature malleability — the algebraic core of BIP-62 rule 5 / BIP-146 low-s; noninjectivity of the secp256k1 x-projection (every signature (r,s) has a sibling (r,−s)…
Ecdlp.Curve.secp256k1_pointX_neg, secp256k1_pointX_not_injective, secp256k1_pointX_neg_zsmul_add, Ecdlp.Schnorr.ecdsa_sibling_signing_equation, ecdsa_sibling_scalars
Full ledger claim and scope
ECDSA signature malleability — the algebraic core of BIP-62 rule 5 / BIP-146 low-`s`; noninjectivity of the secp256k1 `x`-projection (every signature `(r,s)` has a sibling `(r,−s)` verifying the same message/key: `ecdsa_sibling_signing_equation` — the signing identity holds for `(−s,−k)`; `ecdsa_sibling_scalars` — `u/(−s) = −(u/s)` negates both verifier scalars; `secp256k1_pointX_neg` — point negation fixes the `x`-coordinate (`−(x,y)=(x,−y)`, `a₁=a₃=0`); `secp256k1_pointX_not_injective` — the concrete witnesses `G` and `−G` have equal `pointX` but are distinct because `G` is nonzero and secp256k1 has no nonzero two-torsion; `secp256k1_pointX_neg_zsmul_add` — the negated verification point has the same `pointX`. Honest scope: identity-level algebra and one representation boundary, no `Verify` predicate, no hash/DER level, no `ZMod p → ZMod n` reduction of `x`, no SGGM lower-bound instantiation, and no ECDLP speedup. Field lemmas pure-kernel; closed repository instantiations of the parameterized coordinate lemmas inherit compiler-trusted primality facts, while `secp256k1_pointX_not_injective` directly inherits `Lean.ofReduceBool` from the no-two-torsion computational certificate in `CurveCardinalityExact.lean`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Point.neg_some`, `div_neg`, `linear_combination`) + secp256k1 nonzero/two-torsion certificates
E[n] = ker[n] (torsion = kernel of the multiplication-by-n endomorphism)
Ecdlp.Torsion.torsionBy_eq_ker_nsmul
Full ledger claim and scope
E[n] = ker[n]` (torsion = kernel of the multiplication-by-`n` endomorphism)
- Domain
- ecdlp-ledger
- Method
- Mathlib
E[n] = points of order dividing n (P∈E[n] ⟺ ord P ∣ n)
Ecdlp.Torsion.mem_torsionBy_iff_addOrderOf_dvd
Full ledger claim and scope
E[n]` = points of order dividing `n` (`P∈E[n] ⟺ ord P ∣ n`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ElGamal additive homomorphism (e-voting homomorphic tally)
Ecdlp.Schnorr.elgamal_additively_homomorphic
- Domain
- ecdlp-ledger
- Method
- Mathlib
ElGamal ciphertext re-randomization (mixnet unlinkability)
Ecdlp.Schnorr.elgamal_rerandomize_decrypt
- Domain
- ecdlp-ledger
- Method
- Mathlib
ElGamal decryption correctness
Ecdlp.Schnorr.elgamal_decrypt
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
Exact affine/infinity chart-polynomial cover of the frozen stage-14 C16 predicate (an infinity mask I : Finset (Fin 14) represents every selected slot by [1:0] and every rem…
Ecdlp.FrozenProjectiveSemaev.FrozenChartPolynomialCover, frozenProjectiveChain_iff_chartPolynomialCover, frozenGuardedProjectiveSystem_iff_chartPolynomialCover, frozenRecS17_iff_chartPolynomialCover_over, card_chartEquation, card_chartVar, chartPolynomialEquation_base_totalDegree_le_two, chartPolynomialEquation_step_totalDegree_le_four, chartPolynomialEquation_final_totalDegree_le_two, chartPolynomialEquation_totalDegree_le_four and supporting declarations
Full ledger claim and scope
Exact affine/infinity chart-polynomial cover of the frozen stage-14 `C16` predicate (an infinity mask `I : Finset (Fin 14)` represents every selected slot by `[1:0]` and every remaining slot by one affine scalar `[X_i:1]`. For each fixed mask, `ChartVar I` has exactly `14 - I.card` variables and `ChartEquation` has exactly fifteen literal `H` equations: one base equation of total degree at most two, thirteen internal equations of degree at most four, and one final equation of degree at most two. The existential finite chart cover is exactly equivalent to `FrozenProjectiveChain`, the TASK-022 guarded system, and, after the existing injective base change into an algebraically closed target field, the source frozen stage-14 predicate. Honest scope: `[1:0]` is retained and `[0:0]` is never introduced; the `2^14` logical masks are not enumerated or materialized. Counts are representation inventory, not independent dimensions or relations, and all degree statements are upper bounds. This theorem-only result claims no base-field descent, solver run or solver-readiness result, relation yield, rank, recovery, cost advantage, exact-target computation, or ECDLP attack. `card_chartEquation` is compiler-trusted through `native_decide`; `card_chartVar`, the equivalences, and the degree bounds use the standard Lean/Mathlib trust base)
- Domain
- ecdlp-ledger
- Method
- exact two-chart normalization + literal fixed-mask `MvPolynomial` family + TASK-021/TASK-022 equivalences + injective base change; `native_decide` only for `card_chartEquation
Exact distinct-root counts of ψₙ over 𝔽̄_p: 4/6/12/24 for n=3/4/5/7 (secp256k1_Ψ₃_roots_card_bar + preΨ₄/preΨ₅/preΨ₇ (=6/12/24), with …_roots_nodup_bar (.…
Ecdlp.Curve.secp256k1_Ψ₃_roots_card_bar, secp256k1_preΨ₄_roots_card_bar
Full ledger claim and scope
Exact distinct-root counts of `ψₙ` over `𝔽̄_p`: `4/6/12/24` for `n=3/4/5/7` (`secp256k1_Ψ₃_roots_card_bar` + `preΨ₄`/`preΨ₅`/`preΨ₇` (=`6`/`12`/`24`), with `…_roots_nodup_bar` (`.Nodup`) and `…_separable` (`Separable ψₙ`): `((ψₙ).map φ).roots.card` over `𝔽̄_p`, `φ:𝔽_p→𝔽̄_p` the base change — the separability/root-count layer, from squarefreeness + `IsAlgClosed.splits` + `splits_iff_card_roots`. For odd `n` the count is `(n²−1)/2`; the even `n=4` gives `6` = the primitive-4-torsion `x`-coordinates (`(#E[4]−#E[2])/2`). A statement purely about `ψₙ` and its roots in `𝔽̄_p`; the `#E[n]` consequence is deferred to the structure assembly)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Separable.map`, `IsAlgClosed.splits`, `splits_iff_card_roots`, `nodup_roots`)
ECDLP
Kernel + compiler
#
Exact guarded scalar representation of the frozen stage-14 C16 predicate (over a source field k, an injective coefficient map into an algebraically closed field K carries s…
Ecdlp.FrozenProjectiveSemaev.guardEquation, FrozenGuardedProjectiveSystem, frozenProjectiveChain_iff_guardedProjectiveSystem, frozenRecS17_iff_guardedProjectiveSystem_over, guardedEquation_totalDegree_le_four, card_guardVar_fourteen, card_guarded_equations_fourteen and supporting declarations
Full ledger claim and scope
Exact guarded scalar representation of the frozen stage-14 `C16` predicate (over a source field `k`, an injective coefficient map into an algebraically closed field `K` carries `specialize q y (frozenC k 14) = 0` iff the literal finite polynomial family `∃ assignment : GuardVar → K, ∀ e : GuardedEquation, MvPolynomial.eval assignment (guardedEquation q y e) = 0` holds. Four raw scalar coordinates `(U,V,A,B)` for each of fourteen intermediate projective slots give 56 variables; fifteen literal `H` equations plus fourteen guards `AU+BV−1=0` give 29 equation-family members. Every equation has total degree at most four. The guards exclude `[0:0]` and retain `[1:0]`. Honest scope: target witnesses need not descend to `k`; 56 variables and 29 equations are raw counts, not independent dimensions or relations. This is one literal finite `MvPolynomial` family equivalent to the recursive chain, not a parallel recursive syntax, expanded direct `S17`, solver input, rank/yield result, solving-cost claim, or ECDLP attack. The two finite-cardinality facts are compiler-trusted through `native_decide`; the equivalence and degree-bound theorems use the standard Lean/Mathlib trust base)
- Domain
- ecdlp-ledger
- Method
- literal finite guarded `MvPolynomial` family + TASK-021 chain equivalence + injective base change; `native_decide` only for two finite-cardinality facts
Exact-order small-prime torsion classification (secp256k1_smallprime_addOrderOf: for a nonzero affine P=(x,y) and each prime ℓ ∈ {2,3,5,7}, addOrderOf P = ℓ ⟺ (ψ ℓ).evalEva…
Ecdlp.Curve.secp256k1_smallprime_addOrderOf
Full ledger claim and scope
Exact-order small-prime torsion classification (`secp256k1_smallprime_addOrderOf`: for a nonzero affine `P=(x,y)` and each prime `ℓ ∈ {2,3,5,7}`, `addOrderOf P = ℓ ⟺ (ψ ℓ).evalEval x y = 0` — the capstone tying the full per-`n` bridge ladder to *exact point order*; upgrades each `ℓ•P=0` bridge to an order statement since a `Point.some` is automatically nonzero and `ℓ` prime)
- Domain
- ecdlp-ledger
- Method
- the four bridges + Mathlib (`addOrderOf_dvd_iff_nsmul_eq_zero`, `Nat.dvd_prime`, `AddMonoid.addOrderOf_eq_one_iff`)
Feldman VSS share verification (DKG)
Ecdlp.Schnorr.feldman_vss_verify
- Domain
- ecdlp-ledger
- Method
- Mathlib
Fixed-formal-degree projective resultant and literal TASK-018 Sylvester convention (for positive declared degrees over an algebraically closed field, under explicit actual-degree…
Ecdlp.ProjectiveResultant.fixedDegree_resultant_eq_zero_iff_common_projective_root, map_fixedDegree_resultant_eq_zero_iff_common_projective_root, fixedDegree_resultant_eq_zero_iff_common_projective_root_over; Ecdlp.TaskSylvester.taskSylvester_eq_reindex_transpose, det_taskSylvester_eq_resultant, det_taskSylvester_eq_zero_iff_common_projective_root
Full ledger claim and scope
Fixed-formal-degree projective resultant and literal TASK-018 Sylvester convention (for positive declared degrees over an algebraically closed field, under explicit actual-degree bounds, `Res(f,g;m,n)=0` iff the fixed-degree homogenizations share a non-irrelevant projective root. Zero forms and degree drops are included: affine roots use `[x:1]`, while simultaneous degree drop is witnessed by `[1:0]`; `[0:0]` is excluded. The mapped and injective-base-change forms retain the formal degrees. The literal TASK-018 matrix — first `n` shifted descending rows of `f`, then `m` of `g`, with descending columns — is exactly a simultaneous row/column reversal of Mathlib's transposed Sylvester matrix, so its determinant equals the fixed resultant with coefficient unit exactly `1`, without primitive/content normalization. Honest scope: the general coefficient-map theorem is not the specialization theorem for the frozen recursive `C_r`; neither that specialization nor the universal reverse `C16 → C2` implication is proved here)
- Domain
- ecdlp-ledger
- Method
- Mathlib fixed-degree homogenization/resultant + exact matrix reindex/transpose
Frozen recursive projective C_r specialization, uniform output degree, and one-step reverse interface (frozenC R s = C_(s+2) is the literal TASK-018 left-fold recursion.
Ecdlp.FrozenProjectiveSemaev.specialize_frozenC_succ_over, specialize_frozenC_succ_over_affine, specialize_frozenC_succ_over_infinity, previousSliceAtOver_frozenC_natDegree_le, specialize_frozenC_succ_eq_zero_iff_common_projective_root, specialize_frozenC_succ_over_eq_zero_iff_common_projective_root
Full ledger claim and scope
Frozen recursive projective `C_r` specialization, uniform output degree, and one-step reverse interface (`frozenC R s = C_(s+2)` is the literal TASK-018 left-fold recursion. After every coefficient map and valid projective leaf specialization, each successor equals the exact literal Sylvester determinant at fixed formal degrees `(2^(s+1),2)` with coefficient unit `1`; separate corollaries cover affine output `[y:1]` and infinity `[1:0]`. The predecessor output degree is uniformly at most `2^(s+1)`: the determinant has two rows constant in the new output and `2^(s+1)` rows of degree at most two. Hence, over an algebraically closed field, every frozen successor vanishes iff its predecessor and local `H` slice share a non-irrelevant projective root, without a residual degree hypothesis. Honest scope: this is a one-step witness interface, not yet the recursive witness-chain induction `C16 → C2`, a direct-S17 equivalence, or a solving-cost claim)
- Domain
- ecdlp-ledger
- Method
- Mathlib multivariate evaluation + literal fixed-degree Sylvester determinant + row-weighted determinant-degree bound
Function-field a/b extraction — every rational function is a quotient of regular functions (functionField_exists_num_den: every f in the curve's function field (FractionRin…
Ecdlp.Weil.functionField_exists_num_den, functionField_num_den_cross, evalFracAt_num_den_well_defined, secp256k1_miller_function_num_den
Full ledger claim and scope
Function-field `a/b` extraction — every rational function is a quotient of regular functions (`functionField_exists_num_den`: every `f` in the curve's function field (`FractionRing F[E]`, definitionally) equals `algebraMap a / algebraMap b` with `b ≠ 0` — via `IsLocalization.surj` on the nonZeroDivisors localization; with the division-free form (`functionField_exists_mul_num_den`), cross-multiplication faithfulness of two presentations (`functionField_num_den_cross`), nonzero-numerator (`functionField_num_ne_zero`), the weld to `evalFracAt` (`evalFracAt_num_den_well_defined`: presentations regular at `P` evaluate equally), and the Miller instantiation `secp256k1_miller_function_num_den` (the W2 generator `f_P` = an explicit quotient `↑a/↑b`, and the fractional ideal is generated by that quotient). Honest scope: the extraction controls `b ≠ 0` but not *where* `b` vanishes — choosing a presentation with `b(P) ≠ 0` for `f` regular at `P` is the documented next rung, then `f_P(D_Q)` and W4)
- Domain
- ecdlp-ledger
- Method
- IsLocalization.surj`/`IsFractionRing.injective` (source-verified) + `evalFracAt` layer + W2
ECDLP
Kernel + compiler
#
GLV automorphism orbit structure (orbits of glvPoint have size ≤ 3; away from the x=0 fixed locus exactly 3: secp256k1_glvPoint_orbit_closed — {P, φP, φ²P} is φ-closed (…
Ecdlp.Curve.secp256k1_glvPoint_orbit_closed, secp256k1_glvPoint_orbit_three_distinct
Full ledger claim and scope
GLV automorphism orbit structure (orbits of `glvPoint` have size ≤ 3; away from the `x=0` fixed locus exactly 3: `secp256k1_glvPoint_orbit_closed` — `{P, φP, φ²P}` is `φ`-closed (cycling via the existing `glvPoint_cube_eq_id`, `φ³=id`); `secp256k1_glvPoint_orbit_three_distinct` — the three are pairwise distinct for `x≠0`. The group root of the measured `~3×` GLV factor-base constant (P0–P4): orbit size ≤3 ⇒ at most a 3× compression, a constant, never an exponent change — not an ECDLP advantage. Compiler-trusted: the orbit facts lift `Secp256k1.beta_field_eigenvalue` (`native_decide`), so they inherit `Lean.ofReduceBool`)
- Domain
- ecdlp-ledger
- Method
- Mathlib + `glvPoint_cube_eq_id` + `secp256k1_glvPoint_fixed_iff
ECDLP
Kernel + compiler
#
GLV covariance law of the division polynomials (ψ_m(βx) = β^((m²−1)/2)·ψ_m(x): for j=0 each ψ_m sits on one exponent-residue mod 3, so β acts by a scalar — Ψ₃(βx)=β·Ψ₃(x)…
Ecdlp.Curve.secp256k1_Ψ₃_eval_glv, secp256k1_preΨ₅_eval_glv_invariant, secp256k1_preΨ₇_eval_glv_invariant, secp256k1_Ψ₂Sq_eval_glv_invariant
Full ledger claim and scope
GLV covariance law of the division polynomials (`ψ_m(βx) = β^((m²−1)/2)·ψ_m(x)`: for `j=0` each `ψ_m` sits on one exponent-residue mod 3, so `β` acts by a scalar — `Ψ₃(βx)=β·Ψ₃(x)` (`secp256k1_Ψ₃_eval_glv`), and `preΨ' 5`, `preΨ' 7`, `Ψ₂Sq` are `β`-invariant (`secp256k1_{preΨ₅,preΨ₇,Ψ₂Sq}_eval_glv_invariant`), from the explicit forms + `β³=1`. Explains the failed experiment #100: `Res(preΨ' 5(X), preΨ' 5(βX)) = Res(preΨ' 5, preΨ' 5) = 0` identically because `preΨ' 5` is `β`-invariant — the split/inert resultant test was ill-posed, not a signal. The residual is closed by a kernel-only `linear_combination`, but the underlying cube fact `β³=1` lifts `Secp256k1.beta_field_eigenvalue` (`native_decide`), so these results inherit `Lean.ofReduceBool` — compiler-trusted, not kernel-only)
- Domain
- ecdlp-ledger
- Method
- Mathlib + `cube_root_of_eigenvalue` + explicit ψ forms
GLV covariance of Semaev S₃/S₄ and exact relation-set transport (S₃_diagonal_cube_covariance and S₃_diagonal_cube_zero_iff prove simultaneous polynomial covariance and pre…
Ecdlp.Semaev.S₃_diagonal_cube_covariance, Ecdlp.Semaev.S₃_diagonal_cube_zero_iff, Ecdlp.Semaev.S₄_diagonal_cube_invariant, Ecdlp.Semaev.secp256k1_S₃_glv_covariance, Ecdlp.Semaev.secp256k1_S₃_glv_zero_iff, Ecdlp.Semaev.secp256k1_S₄_glv_invariant, Ecdlp.Curve.secp256k1_glv_list_sum_eq_iff, Ecdlp.Curve.secp256k1_glv_three_point_sum_eq_iff, Ecdlp.Semaev.S₄_glv_target_transport, Ecdlp.Semaev.S₄_glv_fibre_transport, Ecdlp.Semaev.glv_target_ne_self, Ecdlp.Semaev.secp256k1_S₄_glv_target_transport, Ecdlp.Semaev.secp256k1_S₄_glv_fibre_transport, Ecdlp.Semaev.secp256k1_glv_fixed_target_moves, Ecdlp.Semaev.secp256k1_glv_affine_target_moves
Full ledger claim and scope
GLV covariance of Semaev `S₃`/`S₄` and exact relation-set transport (`S₃_diagonal_cube_covariance` and `S₃_diagonal_cube_zero_iff` prove simultaneous polynomial covariance and preservation of the `S₃=0` condition; `S₄_diagonal_cube_invariant` proves exact diagonal invariance of the resultant-defined `S₄`. The secp256k1 specializations instantiate these identities at the GLV cube root. `secp256k1_glv_list_sum_eq_iff` and its three-point form prove `ΣPᵢ=R ⟺ Σφ(Pᵢ)=φ(R)`. The fixed-target theorem layer is S₄ only: `S₄_glv_target_transport` and `S₄_glv_fibre_transport` distinguish the polynomial target exponent from the fibre direction. `secp256k1_glv_affine_target_moves` combines `secp256k1_x_ne_zero` with `secp256k1_glv_fixed_target_moves`, proving that every `𝔽_p`-rational affine target is moved by nonidentity diagonal GLV scaling. The exhaustive fixed-target `S₄` coordinate-scaling classification is deliberately NOT claimed in Lean and remains independently replayed certificate evidence. Scope excludes the point at infinity, extension-field targets, and non-scalar or birational automorphisms; no asymptotic or ECDLP consequence is claimed)
- Domain
- ecdlp-ledger
- Method
- Mathlib + exact Sylvester resultant + existing GLV automorphism + `secp256k1_x_ne_zero
GLV eigenvalue has order exactly 3 (primitive cube root)
Ecdlp.Proved.orderOf_eigenvalue_eq_three
- Domain
- ecdlp-ledger
- Method
- Mathlib
GLV eigenvalue is a cube root of unity (ring form)
Ecdlp.Proved.cube_root_of_eigenvalue
- Domain
- ecdlp-ledger
- Method
- Mathlib
GLV eigenvalue property φ=[k], conditional on cyclicity (if E(𝔽_p) is cyclic then glvHom is multiplication by a fixed k:ℤ with (k²+k+1)•P=0 for all P — the geometric …
Ecdlp.Curve.secp256k1_glvHom_eq_zsmul
Full ledger claim and scope
GLV eigenvalue property `φ=[k]`, conditional on cyclicity (if `E(𝔽_p)` is cyclic then `glvHom` is multiplication by a fixed `k:ℤ` with `(k²+k+1)•P=0` for all `P` — the geometric `β`-action *is* scalar `[λ]`; a genuine reduction isolating the one deep missing input, point-counting `#E=n`, as the explicit `[IsAddCyclic]` hypothesis)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`map_cyclic`)
GLV eigenvalue ⇒ scalar action (an endomorphism φ fixing a cyclic group's generator as a λ-eigenvector acts as [λ] on the whole subgroup: φ x = λ•x; the algebraic core of…
Ecdlp.Curve.glv_root_mod_n_condition
Full ledger claim and scope
GLV eigenvalue ⇒ scalar action (an endomorphism `φ` fixing a cyclic group's generator as a `λ`-eigenvector acts as `[λ]` on the whole subgroup: `φ x = λ•x`; the algebraic core of the GLV speed-up used on secp256k1, promoted from stem `glv_root_mod_n_condition_008`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`map_zsmul`, `smul_comm`)
GLV endomorphism bundled as AddMonoidHom (glvHom : Point →+ Point; *supporting* — repackages glvPoint_add, no new content)
Ecdlp.Curve.glvHom
Full ledger claim and scope
GLV endomorphism bundled as `AddMonoidHom` (`glvHom : Point →+ Point`; *supporting* — repackages `glvPoint_add`, no new content)
- Domain
- ecdlp-ledger
- Method
- Mathlib
GLV endomorphism has order dividing 3 (glvPoint³=id: iterating (x,y)↦(βx,y) scales x by β³=1; the CM automorphism is order-3)
Ecdlp.Curve.glvPoint_cube_eq_id
Full ledger claim and scope
GLV endomorphism has order dividing 3 (`glvPoint³=id`: iterating `(x,y)↦(βx,y)` scales `x` by `β³=1`; the CM automorphism is order-3)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
GLV endomorphism is *not* the identity (glvHom ≠ id, witnessed by β·Gx ≠ Gx on the base point — rules out the degenerate case, so with glvHom³=id and φ²+φ+1=0 the order in…
Ecdlp.Curve.secp256k1_glvHom_ne_id
Full ledger claim and scope
GLV endomorphism is *not* the identity (`glvHom ≠ id`, witnessed by `β·Gx ≠ Gx` on the base point — rules out the degenerate case, so with `glvHom³=id` and `φ²+φ+1=0` the order in `Aut(E)` is *exactly* 3: `glvHom` is a primitive cube root of unity ⇒ `ℤ[ω]↪End(E)`, genuine CM)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
GLV endomorphism is a primitive cube root of unity (φ²+φ+1=0: glvPoint²(P)+glvPoint(P)+P=0 for all P; the CM / End(E) structure behind GLV — reached with no λ, no point-…
Ecdlp.Curve.secp256k1_glv_cube_relation
Full ledger claim and scope
GLV endomorphism is a primitive cube root of unity (`φ²+φ+1=0`: `glvPoint²(P)+glvPoint(P)+P=0` for all `P`; the CM / `End(E)` structure behind GLV — reached with no `λ`, no point-counting)
- Domain
- ecdlp-ledger
- Method
- Mathlib
GLV endomorphism is an automorphism (glvPoint is bijective — glvPoint² is its two-sided inverse, from glvPoint³=id)
Ecdlp.Curve.glvPoint_bijective
Full ledger claim and scope
GLV endomorphism is an automorphism (`glvPoint` is bijective — `glvPoint²` is its two-sided inverse, from `glvPoint³=id`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
GLV endomorphism preserves n-torsion (glvPoint maps E[n]→E[n]; restricts to an endomorphism of the torsion, still φ²+φ+1=0 there — the scene where [λ] lives)
Ecdlp.Curve.secp256k1_glv_preserves_torsion
Full ledger claim and scope
GLV endomorphism preserves `n`-torsion (`glvPoint` maps `E[n]→E[n]`; restricts to an endomorphism of the torsion, still `φ²+φ+1=0` there — the scene where `[λ]` lives)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
GLV endomorphism preserves nonsingularity (smooth (x,y) ↦ smooth (βx,y); β a unit)
Ecdlp.Curve.secp256k1_glv_preserves_nonsingular
Full ledger claim and scope
GLV endomorphism preserves nonsingularity (smooth `(x,y)` ↦ smooth `(βx,y)`; `β` a unit)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
GLV endomorphism preserves the curve ((x,y)↦(βx,y) keeps Y²=X³+7, via β³=1)
Ecdlp.Curve.secp256k1_glv_preserves_equation
Full ledger claim and scope
GLV endomorphism preserves the curve (`(x,y)↦(βx,y)` keeps `Y²=X³+7`, via `β³=1`)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
GLV endomorphism satisfies its minimal polynomial in End(E) (operator form: glvHom∘glvHom+glvHom+id=0 as AddMonoidHoms — φ²+φ+1=0 in the endomorphism ring, composable with…
Ecdlp.Curve.glvHom_minpoly
Full ledger claim and scope
GLV endomorphism satisfies its minimal polynomial in `End(E)` (operator form: `glvHom∘glvHom+glvHom+id=0` as `AddMonoidHom`s — `φ²+φ+1=0` in the endomorphism ring, composable with Mathlib's hom API; *alternate/operator form* of `secp256k1_glv_cube_relation`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
GLV fixed locus meets E[n] trivially when gcd(n,3)=1 (secp256k1_glvPoint_fixed_coprime_three: Coprime n 3 → n•P=0 → glvPoint P = P → P = 0 — the coprime-3 fixed-point-free…
Ecdlp.Curve.secp256k1_glvPoint_fixed_coprime_three
Full ledger claim and scope
GLV fixed locus meets `E[n]` trivially when `gcd(n,3)=1` (`secp256k1_glvPoint_fixed_coprime_three`: `Coprime n 3 → n•P=0 → glvPoint P = P → P = 0` — the coprime-3 fixed-point-freeness of the CM automorphism, the group-law shadow of `ker(φ−1) ⊆ E[3]`)
- Domain
- ecdlp-ledger
- Method
- secp256k1_glvPoint_fixed_three_torsion` + Mathlib (`Nat.dvd_gcd`, `addOrderOf_dvd_*`)
GLV map is an additive endomorphism (glvPoint(P+Q)=glvPoint P+glvPoint Q, all branches; homomorphism half only — the glvPoint=[λ] eigenvalue property is not proved)
Ecdlp.Curve.glvPoint_add
Full ledger claim and scope
GLV map is an additive endomorphism (`glvPoint(P+Q)=glvPoint P+glvPoint Q`, all branches; homomorphism half only — the `glvPoint=[λ]` eigenvalue property is not proved)
- Domain
- ecdlp-ledger
- Method
- Mathlib
GLV slope scaling, all branches (unconditional: GLV scales the addition slope by exactly β²)
Ecdlp.Curve.secp256k1_glv_slope
Full ledger claim and scope
GLV slope scaling, all branches (unconditional: GLV scales the addition slope by exactly `β²`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
GLV slope scaling, secant branch (x₁≠x₂: slope(βx₁,βx₂)=β²·slope, via β⁻¹=β²)
Ecdlp.Curve.secp256k1_glv_slope_of_X_ne
Full ledger claim and scope
GLV slope scaling, secant branch (`x₁≠x₂`: `slope(βx₁,βx₂)=β²·slope`, via `β⁻¹=β²`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
GLV slope scaling, tangent branch (doubling x₁=x₂: 3(βx)²/(2y)=β²·slope)
Ecdlp.Curve.secp256k1_glv_slope_of_Y_ne
Full ledger claim and scope
GLV slope scaling, tangent branch (doubling `x₁=x₂`: `3(βx)²/(2y)=β²·slope`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
GLV structure is one scalar on base and target (no-go, cond.
Ecdlp.Curve.secp256k1_glv_single_scalar
Full ledger claim and scope
GLV structure is one scalar on base and target (no-go, cond. cyclicity) (`secp256k1_glv_single_scalar`: under cyclicity, on a DLP instance `Q = m•P` the endomorphism satisfies `glvHom P = k•P` and `glvHom Q = k•Q` for the one eigenvalue `k` with `k²+k+1≡0` — it multiplies base and target by the *same* `k`, leaving `m` invariant. The entire CM "extra structure" is this single known relation; no new unknown, no new equation on `m`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`map_cyclic`)
GLV β-equivariance of addX (addX(βx₁,βx₂,β²ℓ)=β·addX; new X-coord scales by β)
Ecdlp.Curve.secp256k1_glv_addX
Full ledger claim and scope
GLV β-equivariance of `addX` (`addX(βx₁,βx₂,β²ℓ)=β·addX`; new `X`-coord scales by `β`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
GLV β-equivariance of addY (addY(βx₁,βx₂,y₁,β²ℓ)=addY; Y-coord unchanged)
Ecdlp.Curve.secp256k1_glv_addY
Full ledger claim and scope
GLV β-equivariance of `addY` (`addY(βx₁,βx₂,y₁,β²ℓ)=addY`; `Y`-coord unchanged)
- Domain
- ecdlp-ledger
- Method
- Mathlib
GLV/CM automorphism permutes the n-torsion (secp256k1_glvPoint_bijOn_torsion: the order-3 GLV endomorphism glvPoint restricts to a Set.BijOn of E[n] = {P \| n•P=0} onto…
Ecdlp.Curve.secp256k1_glvPoint_bijOn_torsion
Full ledger claim and scope
GLV/CM automorphism permutes the `n`-torsion (`secp256k1_glvPoint_bijOn_torsion`: the order-3 GLV endomorphism `glvPoint` restricts to a `Set.BijOn` of `E[n] = {P \| n•P=0}` onto itself — additivity sends `E[n]` into itself, `glvPoint³ = id` gives surjectivity; a new endomorphism↔torsion interaction, no point-counting/Weil needed)
- Domain
- ecdlp-ledger
- Method
- glvHom`/`glvPoint_bijective`/`glvPoint_cube_eq_id` + Mathlib (`map_nsmul`)
GLV/CM endomorphism preserves the discrete log (no-go) (secp256k1_glv_preserves_dlog: for every scalar m:ℤ and points with Q = m•P, glvHom Q = m•glvHom P — mapping a DLP i…
Ecdlp.Curve.secp256k1_glv_preserves_dlog
Full ledger claim and scope
GLV/CM endomorphism preserves the discrete log (no-go) (`secp256k1_glv_preserves_dlog`: for every scalar `m:ℤ` and points with `Q = m•P`, `glvHom Q = m•glvHom P` — mapping a DLP instance `(P,Q)` through the GLV endomorphism gives another instance with the same secret `m`. The endomorphism is a DLP self-reduction that is the identity on the exponent, so *this reduction* cannot shrink it: the formal core of the believed "CM-by-`ℤ[ζ₃]` gives no asymptotic advantage against ECDLP" — a scoped, not universal, no-go (it does not rule out some unknown faster algorithm using `ℤ[ζ₃]`; it proves *this* map is exponent-preserving). The order-3 automorphism buys only a constant factor (~√3 rho, ~2× scalar-mult). Unconditional as an identity on the exponent)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`map_zsmul`)
IsCoprime ↔ no common root (over a field k, non-coprime f,g ∈ k[X] ⇒ a genuine common root in any algebraically-closed extension, + easy converse — the field↔k̄ bridge B1 c…
Ecdlp.DivisionPoly.exists_common_root_of_not_isCoprime
Full ledger claim and scope
IsCoprime` ↔ no common root (over a field `k`, non-coprime `f,g ∈ k[X]` ⇒ a genuine common root in any algebraically-closed extension, + easy converse — the field↔`k̄` bridge B1 consumes, independent of the open L4 TODO; node L1 of B1, general/upstreamable)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`EuclideanDomain.gcd`, `IsAlgClosed.exists_root`, `degree_map_eq_of_injective`)
Kernel-structure lemma — order n² killed by prime n ⇒ (ℤ/n)² (a finite abelian group A with ∀ a, n • a = 0 and Nat.card A = n², n prime, is additively ZMod n × ZMod…
Ecdlp.Torsion.nonempty_addEquiv_zmod_prod_of_card_eq_sq
Full ledger claim and scope
Kernel-structure lemma — order `n²` killed by prime `n` ⇒ `(ℤ/n)²` (a finite abelian group `A` with `∀ a, n • a = 0` and `Nat.card A = n²`, `n` prime, is additively `ZMod n × ZMod n`: killed-by-`n` gives the `𝔽_n`-vector-space structure via `AddCommGroup.zmodModule`, `n² = n^dim` pins `dim = 2`, dimension classifies. Input (iii) of node N10 of the `ψₙ↔E[n]` bridge — the group-theoretic half of `E[n] ≅ (ℤ/n)²`, stated curve-free/upstreamable; the counting half `#E[n] = n²` (N10 (i)+(ii): degree + separability) stays open, see `notes/SEPARABILITY_ROUTES.md`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`zmodModule`, `card_eq_pow_finrank`, `nonempty_linearEquiv_of_finrank_eq`)
MuSig2 coefficient-weighted key aggregation
Ecdlp.Schnorr.musig_key_aggregate
- Domain
- ecdlp-ledger
- Method
- Mathlib
Multiplication-by-2 x-coordinate formula in Mathlib's canonical division polynomials (secp256k1_double_x_eq_Φ₂_div_Ψ₂Sq: for a non-2-torsion point P=(x,y) on y²=x³+7, the…
Ecdlp.Curve.secp256k1_double_x_eq_Φ₂_div_Ψ₂Sq, secp256k1_Φ₂
Full ledger claim and scope
Multiplication-by-2 `x`-coordinate formula in Mathlib's canonical division polynomials (`secp256k1_double_x_eq_Φ₂_div_Ψ₂Sq`: for a non-2-torsion point `P=(x,y)` on `y²=x³+7`, the doubled `x`-coordinate `addX x x (slope x x y y) = (Φ 2)(x)/(Ψ₂Sq)(x)` — with Mathlib's own `Φ`/`ΨSq` division polynomials, `Φ 2 = X⁴−56X` (`secp256k1_Φ₂`), `Ψ₂Sq = 4X³+28 = 4y²`. This is the base case `n=2` of the general multiplication formula `x([n]P)=Φₙ/ΨSqₙ` — the engine of the general `ψₙ`-vanishing ⟺ `n`-torsion bridge (`notes/FOUNDATIONS.md` rung 4). Unlike the per-`n` bridges (which used ad-hoc reduced polynomials like `3x⁴+84x`), this states the *canonical* `Φₙ/ΨSqₙ` shape. The general-`n` formula, by induction on the division-polynomial recurrence, is the missing Mathlib rung — absent from v4.31, present only in a stalled upstream PR)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Φ`, `ΨSq`, `slope_of_Y_ne`, `linear_combination`)
ECDLP
Kernel + compiler
#
Multiplication-by-2 y-coordinate formula y(2•P) = ω₂/(2y)³ (N7-uniform S3a base) (secp256k1_double_y_eq_ω₂: for a non-2-torsion point P=(x,y) on y²=x³+7, the doubled y…
Ecdlp.Curve.secp256k1_double_y_eq_ω₂
Full ledger claim and scope
Multiplication-by-2 `y`-coordinate formula `y(2•P) = ω₂/(2y)³` (N7-uniform S3a base) (`secp256k1_double_y_eq_ω₂`: for a non-2-torsion point `P=(x,y)` on `y²=x³+7`, the doubled `y`-coordinate `addY x x y (slope x x y y) = (x⁶ + 140x³ − 392)/(2y)³` — the `y`-analogue of the `n=2` `x`-formula and the first `y`-coordinate division-polynomial value in the repo, i.e. `y(2•P) = ω₂/ψ₂³` with `ψ₂ = 2y` and the `n=2` `y`-coordinate ("omega") polynomial `ω₂ = x⁶ + 140x³ − 392`. Mathlib has no `ω` division polynomial (open `TODO`); the value is derived from the group law's doubling `addY` and closed by one certified `linear_combination` against the curve equation and the slope relation `2y·ℓ = 3x²`. Base case of node S3a of the N7-uniform build (`BARRIERS.md §B3`; target `n7_uniform_secp256k1_x`). Honest scope: fixed `n=2` coordinate identity only; the uniform `y([n]P)=ωₙ/ψₙ³` and the general bivariate `ωₙ` remain open. No `native_decide`, no new axioms)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`addY`/`negAddY`/`negY`/`slope_of_Y_ne`, `linear_combination`, `eq_div_iff`)
ECDLP
Kernel + compiler
#
Multiplication-by-3 x-coordinate formula for secp256k1 — x(3•P) = Φ₃/ΨSq₃ (secp256k1_triple_x_eq_Φ₃_div_ΨSq₃: for P=(x,y) on y²=x³+7 with y≠0, Ψ₃(x)≠0, and the chord…
Ecdlp.Curve.secp256k1_triple_x_eq_Φ₃_div_ΨSq₃
Full ledger claim and scope
Multiplication-by-3 `x`-coordinate formula for secp256k1 — `x(3•P) = Φ₃/ΨSq₃` (`secp256k1_triple_x_eq_Φ₃_div_ΨSq₃`: for `P=(x,y)` on `y²=x³+7` with `y≠0`, `Ψ₃(x)≠0`, and the chord-tangent slopes `s₂` (`2y·s₂=3x²`) / `s₃` (secant `2P→P`, the `FiveTorsionBridge` parametrisation), the tripled `x`-coordinate `s₃²−(s₂²−2x)−x = (Φ 3)(x)/(ΨSq 3)(x)` in Mathlib's canonical division polynomials. Node N7@3 — extends the `n=2` case `secp256k1_double_x_eq_Φ₂_div_Ψ₂Sq`, connecting the concrete `Φ₃`/`ΨSq₃` forms to the actual elliptic-curve group law. Proof mirrors `five_core`: square the secant relation to clear `s₃`, then a CAS-derived `linear_combination` of the slope + curve equations after clearing `(2y)⁴`; certificate `scripts/certs/triple_mult_formula_check.py` (`CERT_OK`). No `native_decide`)
- Domain
- ecdlp-ledger
- Method
- Mathlib field algebra (`linear_combination`, `eq_div_iff`, `mul_right_cancel₀`)
ECDLP
Kernel + compiler
#
Multiplication-by-3 y-coordinate formula y(3•P) = ω₃/ψ₃³ (N7-uniform S3a) (secp256k1_triple_y_eq_ω₃: in the chord-tangent slope parametrisation s₂ (2y·s₂=3x²), s₃ ((s…
Ecdlp.Curve.secp256k1_triple_y_eq_ω₃
Full ledger claim and scope
Multiplication-by-3 `y`-coordinate formula `y(3•P) = ω₃/ψ₃³` (N7-uniform S3a) (`secp256k1_triple_y_eq_ω₃`: in the chord-tangent slope parametrisation `s₂` (`2y·s₂=3x²`), `s₃` (`(s₂²−3x)·s₃ = −(s₂(s₂²−3x)+y)−y`) of the `x`-triple, the tripled `y`-coordinate `s₃·(s₂²−s₃²)−y` equals `ω₃/(3x⁴+84x)³` with the `n=3` `y`-coordinate ("omega") polynomial `ω₃ = y·(x¹²+1540x⁹−87024x⁶−109760x³−1229312)` — bivariate, the `y` factor being the odd-`n` shape. Companion to the `x`-triple `x(3•P)=Φ₃/ΨSq₃` and extends the `n=2` `y`-formula. Mathlib has no `ω` division polynomial (open `TODO`). Proof mirrors the `x`-triple: Step A clears `s₃` via `hℓ3` into an `s₃`-free `W`-expression, Step B is the `s₃`-free master identity cleared by `(2y)³` (CAS-derived `linear_combination` cofactors), then cancel `(s₂²−3x)³`. Honest scope: fixed `n=3` coordinate identity; the uniform `y([n]P)=ωₙ/ψₙ³` remains open. No `native_decide`, no new axioms)
- Domain
- ecdlp-ledger
- Method
- Mathlib field algebra (`linear_combination`, `eq_div_iff`, `mul_right_cancel₀`)
ECDLP
Kernel + compiler
#
N7-uniform ω-free base: joint (x,y) carrier rungs n=1,2 + ω-recurrence anchors (secp256k1) (secp256k1_one_nsmul_coords / secp256k1_two_nsmul_coords_ωfree: the n=1,2 base…
Ecdlp.Curve.secp256k1_one_nsmul_coords, secp256k1_two_nsmul_coords_ωfree, secp256k1_omega_recurrence_two, secp256k1_omega_recurrence_three
Full ledger claim and scope
N7-uniform ω-free base: joint `(x,y)` carrier rungs `n=1,2` + ω-recurrence anchors (secp256k1) (`secp256k1_one_nsmul_coords` / `secp256k1_two_nsmul_coords_ωfree`: the `n=1,2` base cases of the joint carrier — whenever `n•P=(X,Y)` is affine, `X=Φₙ(x)/ΨSqₙ(x)` and the ω-free `y`-relation `Y·(4y)·ψₙ(P)³ = ψ(n+2)ψ(n−1)² − ψ(n−2)ψ(n+1)²`; and `secp256k1_omega_recurrence_two`/`_three`: that ω-recurrence numerator equals `4y·ωₙ` at `n=2,3`, cross-checking the group-law-derived `ω₂,ω₃`. The `y`-conjunct uses only Mathlib's `ψ` — no `ω` division polynomial. Honest scope: base leaves + anchors only; the uniform induction over all `n` stays the open target `n7_uniform_secp256k1_x` (`Ecdlp/Targets/n7_uniform_carrier_induction.lean`, whose `normEDSRec'` reduction to these leaves + named residual walls is machine-checked). These four secp256k1 forms inherit `Lean.ofReduceBool` from the secp256k1 primality/coefficient facts (`native_decide`); no *new* axioms beyond the trusted base)
- Domain
- ecdlp-ledger
- Method
- landed `n=2,3` coordinate formulas + `ψ_isEllSequence
N7@4 — multiplication-by-4 x-coordinate formula: x(4•P) = Φ₄(x)/ΨSq₄(x) (secp256k1_quadruple_x_eq_Φ₄_div_ΨSq₄: whenever 4•P is an affine point (X,Y), X = (Φ 4)(x)/(ΨSq…
Ecdlp.Curve.secp256k1_quadruple_x_eq_Φ₄_div_ΨSq₄, quad_x_core
Full ledger claim and scope
N7@4 — multiplication-by-4 `x`-coordinate formula: `x(4•P) = Φ₄(x)/ΨSq₄(x)` (`secp256k1_quadruple_x_eq_Φ₄_div_ΨSq₄`: whenever `4•P` is an affine point `(X,Y)`, `X = (Φ 4)(x)/(ΨSq 4)(x)` with the degree-16 monic numerator `Φ₄(x) = x¹⁶ − 3808x¹³ + 144256x¹⁰ + 2985472x⁷ + 38108672x⁴ + 68841472x` and degree-15 denominator `ΨSq₄ = preΨ₄²·Ψ₂Sq` — the even rung `n = 4` of the N7 ladder (`n = 2, 3, 4, 5`). The generic branch runs doubling-of-doubling (`4P = 2·(2P)`, two tangents — vs. the odd chords), and its crux is that the outer doubling is the `n = 2` formula applied at `X2 = x(2P)`: `quad_x_core` chains `hInner` (the `n=2` identity `(s₄²−2X2)(4X2³+28) = X2⁴−56X2` at `X2`), `hBridge`, `hkey`; both 2-torsion escapes (`2P = O` or `2P` 2-torsion ⟹ `4P = O`) contradict an affine `4P`. Eval forms via Mathlib `Φ_ofNat`/`ΨSq_ofNat`/`preΨ'_even`; `Φ₄`/`ΨSq₄` independently verified against from-scratch division polynomials + 2-prime numeric `x(4P)` check (`scripts/certs/quad_mult_formula_check.py`, `CERT_OK`))
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Φ_ofNat`, `ΨSq_ofNat`, `preΨ'_even`) + `linear_combination` certificates
ECDLP
Kernel + compiler
#
N7@4 — multiplication-by-4 y-coordinate formula y(4•P) = ω₄/ψ₄³ + fully closed carrier_four leaf (secp256k1_quadruple_y: whenever 4•P is an affine point (X,Y), Y·ψ₄³…
Ecdlp.Curve.secp256k1_quadruple_y, quad_y_core, secp256k1_four_nsmul_coords_ωfree, secp256k1_omega_recurrence_four, secp256k1_psi6_evalEval
Full ledger claim and scope
N7@4 — multiplication-by-4 `y`-coordinate formula `y(4•P) = ω₄/ψ₄³` + fully closed `carrier_four` leaf (`secp256k1_quadruple_y`: whenever `4•P` is an affine point `(X,Y)`, `Y·ψ₄³ = ω₄(x)` with `ψ₄ = (2x⁶+280x³−784)(2y)` and the degree-24 `ω₄(x) = x²⁴+8624x²¹−2875712x¹⁸−16946944x¹⁵−1054135040x¹²−35487778816x⁹−229379784704x⁶−701632282624x³−188900999168` — the `y`-companion of the landed `x(4P)=Φ₄/ΨSq₄`, and the `n=4` analogue of `y(2P)=ω₂/(2y)³` / `y(3P)=ω₃/ψ₃³`. The core `quad_y_core` runs doubling-of-doubling (tangents `s₂` at `P`, `s₄` at `2P`) and closes by three CAS-designed `linear_combination` certificates assembled via the exact identity `(2Y2)³·4096y¹² = ψ₄³`. Fed by the freshly-derived even-index brick `secp256k1_psi6_evalEval` (`ψ6 = 2y·(3x¹⁶+4704x¹³−131712x¹⁰−7639296x⁷−12907776x⁴−103262208x)`) and its anchor `secp256k1_omega_recurrence_four` (`ψ₆ψ₃²−ψ₂ψ₅² = 4y·ω₄`), it reshapes into the joint ω-free carrier leaf `secp256k1_four_nsmul_coords_ωfree`, which closes `carrier_four` (both conjuncts) in the uniform induction stem — the `n=4` (even) base rung of `n7_uniform_secp256k1_x`. `ω₄`/`ψ₆` CAS-validated (on-curve `(A,B)` representation) + 10-prime numeric `Y(4P)·ψ₄³=ω₄` check. Honest scope: fixed `n=4`; the uniform induction over all `n` stays open. No `native_decide`, no new axioms)
- Domain
- ecdlp-ledger
- Method
- landed `x(4P)` + `y(2P)`/`y(3P)` formulas + Mathlib `ψ_even`/`ψ_four
N7@5 — multiplication-by-5 x-coordinate formula: x(5•P) = Φ₅(x)/ΨSq₅(x) (secp256k1_quintuple_x_eq_Φ₅_div_ΨSq₅: whenever 5•P is an affine point (X,Y), then X = (Φ 5)(x)/…
Ecdlp.Curve.secp256k1_quintuple_x_eq_Φ₅_div_ΨSq₅, quint_x_core
Full ledger claim and scope
N7@5 — multiplication-by-5 `x`-coordinate formula: `x(5•P) = Φ₅(x)/ΨSq₅(x)` (`secp256k1_quintuple_x_eq_Φ₅_div_ΨSq₅`: whenever `5•P` is an affine point `(X,Y)`, then `X = (Φ 5)(x)/(ΨSq 5)(x)` — the degree-25 numerator over `preΨ₅²`, again with no side conditions: the generic branch adds `3P + 2P` — a chord between two nontrivial multiples, prototyping the addition step of the general N7 engine — through `quint_x_core` (12 `linear_combination` certificates incl. a 94+55-monomial master, designed by cofactor-tracked elimination of the three slopes `s₅, s₃, s₂`, kernel-re-verified); the 2-torsion branch (`5P = P`) and 3-torsion branch (`5P = 2P`, reduced to the `n = 2` formula) hold via `Ψ₂Sq ⊥ preΨ₅` / `Ψ₃ ⊥ preΨ₅` certificates. `Φ 5`/`ΨSq 5` eval forms derived through Mathlib's `Φ_ofNat`/`ΨSq_ofNat`/`preΨ'_even` recurrences (`preΨ₆ = Ψ₃(preΨ₅ − preΨ₄²)`). All certificates + 25-point (and independent 40-point, different prime) numeric checks: `scripts/certs/quint_mult_formula_check.py` (`CERT_OK`). N7 ladder now `n = 2, 3, 5`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Φ_ofNat`, `ΨSq_ofNat`, `preΨ'_even`) + `linear_combination` certificates
ECDLP
Kernel + compiler
#
NIST P-256 base point has exact order n (weak point-counting keystone) (p256_generator_addOrderOf: the SEC 2 generator G=(Gx,Gy) in Mathlib's point group has addOrderOf G =…
Ecdlp.P256.p256_generator_addOrderOf (+ p256_generator_nonsingular, p256_generator_nsmul_n_eq_zero)
Full ledger claim and scope
NIST P-256 base point has exact order `n` (weak point-counting keystone) (`p256_generator_addOrderOf`: the SEC 2 generator `G=(Gx,Gy)` in Mathlib's point group has `addOrderOf G = n`, so `⟨G⟩` is cyclic of order `n` — the crypto subgroup pinned WITHOUT computing `#E(𝔽_p)` (no Hasse/Schoof). Proof: `n•G=0` (native double-and-add over 𝔽_p) + `G≠0`, `n` prime ⇒ `addOrderOf_eq_prime`. Mirrors secp256k1's `GeneratorOrder.lean`; server-verified on the warm Lean toolchain then CI. Does NOT give the strong keystone `#E=n`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`addOrderOf_eq_prime`) + native_decide
ECDLP
Kernel + compiler
#
NIST P-256 field prime p is prime (Pratt certificate) (p256_p_prime: full recursive Pratt / lucas_primality certificate for p = 2²⁵⁶−2²²⁴+2¹⁹²+2⁹⁶−1, 9 recursive nodes, wi…
Ecdlp.P256.Primality.p256_p_prime (+ instance : Fact (Nat.Prime Ecdlp.P256.p))
Full ledger claim and scope
NIST P-256 field prime `p` is prime (Pratt certificate) (`p256_p_prime`: full recursive Pratt / `lucas_primality` certificate for `p = 2²⁵⁶−2²²⁴+2¹⁹²+2⁹⁶−1`, 9 recursive nodes, witness `a=6`. Discharges the `[Fact p.Prime]` hypothesis, so P-256's `IsElliptic` instance and Mathlib group law become unconditional — exactly as for secp256k1. The second curve's primality via the *same* generator `scripts/pratt_certificate.py`, the honest cross-domain proof that the machinery is curve-agnostic)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`lucas_primality`) + native_decide
ECDLP
Kernel + compiler
#
NIST P-256 group order n is prime (Pratt certificate) (p256_n_prime: full recursive Pratt / lucas_primality certificate for the base-point order n, 10 recursive nodes, wit…
Ecdlp.P256.Primality.p256_n_prime (+ instance : Fact (Nat.Prime Ecdlp.P256.n))
Full ledger claim and scope
NIST P-256 group order `n` is prime (Pratt certificate) (`p256_n_prime`: full recursive Pratt / `lucas_primality` certificate for the base-point order `n`, 10 recursive nodes, witness `a=7`. Gives `[Fact n.Prime]` for P-256, the foundation for its prime-order group structure — the analogue of secp256k1's `Secp256k1PrimeN`. Both P-256 primes (`p`, `n`) now proved by the same curve-agnostic generator)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`lucas_primality`) + native_decide
ECDLP
Kernel + compiler
#
NIST P-256 has no small embedding degree (MOV/Frey–Rück resistance) (p256_embedding_degree_gt_100: for every 1 ≤ k ≤ 100, p^k ≢ 1 (mod n), so P-256's embedding degree exceed…
Ecdlp.P256.p256_embedding_degree_gt_100
Full ledger claim and scope
NIST P-256 has no small embedding degree (MOV/Frey–Rück resistance) (`p256_embedding_degree_gt_100`: for every `1 ≤ k ≤ 100`, `p^k ≢ 1 (mod n)`, so P-256's embedding degree exceeds 100 — the MOV/FR pairing transfer would need an intractable `𝔽_{p^k}`, `k>100`. The second live domain's first attack-boundary rung, mirroring secp256k1's `EmbeddingDegree.lean`; pure modular arithmetic on the verified primes `p`, `n`)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
NIST P-256 is a genuine elliptic curve (P256_Δ_ne_zero + IsElliptic instance: y²=x³−3x+b over 𝔽_p, p=2²⁵⁶−2²²⁴+2¹⁹²+2⁹⁶−1, discriminant a unit — demonstrates the secp256…
Ecdlp.P256.P256_Δ_ne_zero (+ instance : P256.IsElliptic)
Full ledger claim and scope
NIST P-256 is a genuine elliptic curve (`P256_Δ_ne_zero` + `IsElliptic` instance: `y²=x³−3x+b` over `𝔽_p`, `p=2²⁵⁶−2²²⁴+2¹⁹²+2⁹⁶−1`, discriminant a unit — demonstrates the secp256k1 Mathlib grounding is curve-agnostic, same machinery gives P-256 the formalized group law, under the published `[Fact p.Prime]`)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
NIST P-256 is ordinary, non-anomalous, Hasse-consistent (Smart/SSSA boundary) (p256_trace_ordinary_nonanomalous: with #E=n, the trace t=p+1−n satisfies t≠0 (not supersingu…
Ecdlp.P256.p256_trace_ordinary_nonanomalous
Full ledger claim and scope
NIST P-256 is ordinary, non-anomalous, Hasse-consistent (Smart/SSSA boundary) (`p256_trace_ordinary_nonanomalous`: with `#E=n`, the trace `t=p+1−n` satisfies `t≠0` (not supersingular), `t≠1` (not anomalous — Smart/SSSA inapplicable), `t²≤4p` (Hasse; `t` is 127-bit, cofactor 1). The second live domain's SSSA boundary rung, mirroring secp256k1's `TraceOfFrobenius.lean`; conditional on the published `#E=n` as for secp256k1)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
NIST P-256 quadratic-twist security certificate — cross-curve companion of the secp256k1 twist limitation (p256_twist_security_profile: the number 2p+2−n factors exactly as 3…
Ecdlp.P256.p256_twist_security_profile, p256_twist_order_factorization, p256_twist_maxprime_prime
Full ledger claim and scope
NIST P-256 quadratic-twist security certificate — cross-curve companion of the secp256k1 twist limitation (`p256_twist_security_profile`: the number `2p+2−n` factors exactly as `3·5·13·179·Q` with `Q` a 241-bit prime (`p256_twist_maxprime_prime`, full Pratt certificate; `p256_twist_order_factorization`). Honest scope: interpreting `2p+2−n` as the twist order `#Ẽ = p+1+t` rests on `#E = n`, which for P-256 is NOT in-repo (only `n ∣ #E` is proved; parked on Hasse) — the theorems themselves are unconditional arithmetic about the literal number. Consequences: (1) cofactor `3·5·13·179 = 34905 ≈ 2¹⁵ > 1` — the twist has small-order subgroups; (2) `2²⁴⁰ < Q < 2²⁴¹`, so generic twist-DLP `≈ √Q ≈ 2¹²⁰ < 2¹²⁸` — the machine-checked form of the publicly tabulated ~2^120.3 P-256 twist-security figure. Cross-curve: secp256k1's twist (`2¹¹⁰`, cofactor `2³⁷`) is weaker than P-256's (`2¹²⁰`, cofactor `2¹⁵`); point validation mandatory for `x`-only code on both. Inherits `Lean.ofReduceBool` from `native_decide` + Pratt)
- Domain
- ecdlp-ledger
- Method
- native_decide + Pratt (`lucas_primality`)
ECDLP
Kernel + compiler
#
Necessary infinity-stratum pruning of the exact stage-14 chart cover (the three one-infinity specializations of the local triquadratic H are squared projective determinants, whi…
Ecdlp.FrozenProjectiveSemaev.HValue_third_infinity, HValue_first_infinity, HValue_middle_infinity, HValue_first_third_infinity, frozenChartSystem_separatedInfinityMask, frozenChartSystem_endpointCompatibleInfinityMask, frozenChartSystem_leftInfinity_forces_rightCoordinate, frozenChartSystem_rightInfinity_forces_leftCoordinate, frozenChartCover_iff_admissibleChartCover, frozenProjectiveChain_iff_admissibleChartPolynomialCover, frozenChartCover_iff_interiorChartCover, card_infinityMask, card_separatedInfinityMask, card_interiorSeparatedInfinityMask and supporting declarations
Full ledger claim and scope
Necessary infinity-stratum pruning of the exact stage-14 chart cover (the three one-infinity specializations of the local triquadratic `H` are squared projective determinants, while `H([1:0],q,[1:0]) = q.v^2`. Hence, when all external inputs are affine, adjacent intermediate infinity slots are impossible and the exact chart cover restricts from all `2^14 = 16384` masks to the 987 separated subsets of the fourteen-slot path. Selected boundary infinities satisfy exact endpoint determinant equations; if both endpoint determinants are nonzero, slots 0 and 13 are affine and the conditional exact cover has 377 masks. An isolated infinity slot also forces each existing affine neighbor to the normalized current-input coordinate. Honest scope: the predicates are proved necessary, not sufficient or unique; the 987 and 377 families are logical cover counts and are not production-enumerated. This theorem-only result claims no mask-selection algorithm, independent relations, relation yield, rank, solver readiness or run, recovery, memory, runtime, total-cost advantage, exact-target computation, or ECDLP attack. The three cardinalities are compiler-trusted through `native_decide`; the identities, necessity and forced-neighbor theorems, and cover equivalences use the standard Lean/Mathlib trust base)
- Domain
- ecdlp-ledger
- Method
- local projective `H` identities + exact TASK-023 cover restriction + path-independent-set counts; `native_decide` only for the three cardinalities
ECDLP
Kernel + compiler
#
Node N5 closed — Φ n ⊥ ΨSq n for secp256k1, every n : ℤ (secp256k1_isCoprime_Φ_ΨSq: IsCoprime (secp256k1.Φ n) (secp256k1.ΨSq n) over 𝔽_p[X] for all n — the highest-val…
Ecdlp.Curve.secp256k1_isCoprime_Φ_ΨSq
Full ledger claim and scope
Node N5 closed — `Φ n ⊥ ΨSq n` for secp256k1, every `n : ℤ` (`secp256k1_isCoprime_Φ_ΨSq`: `IsCoprime (secp256k1.Φ n) (secp256k1.ΨSq n)` over `𝔽_p[X]` for all `n` — the highest-value unblocked node of the ψₙ↔E[n] bridge toward the counting half `#E[n]=n²` (N10(i)). A non-coprimality feeds the landed eval-bridge descent `secp256k1_exists_normEDS_consecutive_eq_zero_of_not_isCoprime` to two consecutive scalar-`normEDS` zeros, which Ward apparition rigidity `normEDS_not_consecutive_zeros` forbids; the two degeneracy escapes are killed by the `Ψ₂Sq⊥Ψ₃` and `Ψ₃⊥preΨ₄` Bézout certificates pushed to `𝔽̄_p`. No `char∤n` hypothesis; the same module also gives the closure form `secp256k1Bar_isCoprime_Φ_ΨSq` and the registered scalar target `secp256k1_normEDS_no_consecutive_zero`. No new `native_decide`, no new axioms; Split-PR 1 of `notes/reviews/PR172_SPLIT_PLAN.md`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (eval-bridge descent, `normEDS_not_consecutive_zeros`, `map_Ψ₂Sq`/`map_Ψ₃`/`map_preΨ₄` + Bézout certs)
Number of generators of a cyclic group = φ(n) (mov_random_q_success_probability: in a cyclic group of order n, #{g \| orderOf g = n} = φ(n) — the count of full-order eleme…
Ecdlp.MovReduction.mov_random_q_success_probability
Full ledger claim and scope
Number of generators of a cyclic group = `φ(n)` (`mov_random_q_success_probability`: in a cyclic group of order `n`, `#{g \| orderOf g = n} = φ(n)` — the count of full-order elements; underpins the MOV/Frey–Rück random-`Q` success probability `φ(n)/n`. Layer-3 generated, closed the last open Layer-3 `Targets/` stem of its batch (the intentional smoke stem stays open), corpus claim `mov-random-q-success-probability-006`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`IsCyclic.card_orderOf_eq_totient`)
Okamoto identification — 2-witness extraction (soundness)
Ecdlp.Schnorr.okamoto_extract
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
P-256 base point on curve; constants validated (P256_generator_equation: the standard generator G=(Gx,Gy) satisfies P-256's equation in 𝔽_p — one native_decide simultaneou…
Ecdlp.P256.P256_generator_equation
Full ledger claim and scope
P-256 base point on curve; constants validated (`P256_generator_equation`: the standard generator `G=(Gx,Gy)` satisfies P-256's equation in `𝔽_p` — one `native_decide` simultaneously validates `p`, `b`, `Gx`, `Gy`; a genuine rational point of the Mathlib curve)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
P-256 has c₄ ≠ 0, hence j ≠ 0 — no CM/GLV (structural contrast) (P256_c₄_ne_zero: c₄=144≠0, so unlike secp256k1 (c₄=0, j=0) P-256 has no complex multiplication by ℤ[ζ…
Ecdlp.P256.P256_c₄_ne_zero
Full ledger claim and scope
P-256 has `c₄ ≠ 0`, hence `j ≠ 0` — no CM/GLV (structural contrast) (`P256_c₄_ne_zero`: `c₄=144≠0`, so unlike secp256k1 (`c₄=0`, `j=0`) P-256 has no complex multiplication by `ℤ[ζ₃]` and no GLV endomorphism. Makes concrete that secp256k1's `j=0`/CM structure is a *special* feature, not generic)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
P-256 rational-point group is finite (instFiniteP256Point: Finite P256.toAffine.Point, now a one-line inferInstance corollary of the general WeierstrassCurve.Affine.instFin…
Ecdlp.P256.instFiniteP256Point
Full ledger claim and scope
P-256 rational-point group is finite (`instFiniteP256Point`: `Finite P256.toAffine.Point`, now a one-line `inferInstance` corollary of the general `WeierstrassCurve.Affine.instFinitePoint` since `ZMod p` is a finite commutative ring. Makes Mathlib's `Nat.card E.toAffine.Point` a real quantity for P-256 rather than junk `0`. Pure-kernel, no native_decide)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Finite.of_injective`) via `instFinitePoint
Pedersen commitments are additively homomorphic
Ecdlp.Schnorr.pedersen_homomorphic
- Domain
- ecdlp-ledger
- Method
- Mathlib
Pedersen computational binding ⇒ DLP
Ecdlp.Schnorr.pedersen_binding_extract
- Domain
- ecdlp-ledger
- Method
- Mathlib
Pohlig–Hellman: CRT reconstruction
Ecdlp.PohligHellman.reconstruct
- Domain
- ecdlp-ledger
- Method
- Mathlib
Pohlig–Hellman: component depends only on x mod d
Ecdlp.PohligHellman.component
Full ledger claim and scope
Pohlig–Hellman: component depends only on `x mod d
- Domain
- ecdlp-ledger
- Method
- Mathlib
Pohlig–Hellman: projection to order-d subgroup
Ecdlp.PohligHellman.projection
Full ledger claim and scope
Pohlig–Hellman: projection to order-`d` subgroup
- Domain
- ecdlp-ledger
- Method
- Mathlib
Point decomposition ⇒ Semaev relation (index-calculus entry point) (secp256k1_point_decomposition_semaev: if a curve point R decomposes as a sum R = P₁ + P₂ with x(P₁) ≠ x(…
Ecdlp.Semaev.secp256k1_point_decomposition_semaev
Full ledger claim and scope
Point decomposition ⇒ Semaev relation (index-calculus entry point) (`secp256k1_point_decomposition_semaev`: if a curve point `R` decomposes as a sum `R = P₁ + P₂` with `x(P₁) ≠ x(P₂)`, then `S₃(x(P₁), x(P₂), x(R)) = 0` — every 2-term decomposition of `R` lies on the Semaev variety. This is the structural reduction index calculus rests on: the search for decompositions is confined to the roots of a single codimension-1 polynomial condition, not the whole group. Proof recasts `R = P₁+P₂` as `P₁+P₂+(−R)=0` and uses `x(−R) = x(R)` (`Point.neg_some`) to hand off to `secp256k1_semaev_three_point`. Forward/structural half only — records *where* solutions live, not the cost of *finding* them; over `𝔽_p` that root-finding is the studied `Θ(√n)` barrier)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Point.neg_some`, `add_neg_cancel`)
Point decomposition ⇒ Semaev relation — doubling case (secp256k1_point_decomposition_semaev_double: the P₁ = P₂ companion — if R = 2·P₁ with P₁ not 2-torsion, then S₃(x(P…
Ecdlp.Semaev.secp256k1_point_decomposition_semaev_double
Full ledger claim and scope
Point decomposition ⇒ Semaev relation — doubling case (`secp256k1_point_decomposition_semaev_double`: the `P₁ = P₂` companion — if `R = 2·P₁` with `P₁` not 2-torsion, then `S₃(x(P₁), x(P₁), x(R)) = 0`. With the generic-sum theorem, covers every 2-term decomposition of `R`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Point.neg_some`, `add_neg_cancel`)
ECDLP
Kernel + compiler
#
Point-evaluated ω-free x-difference identity φ_ψ_diff at a point (N7-uniform odd-step brick, curve-generic) (φ_ψ_diff_evalEval: for an arbitrary Weierstrass curve W over any…
Ecdlp.Curve.φ_ψ_diff_evalEval
Full ledger claim and scope
Point-evaluated ω-free x-difference identity `φ_ψ_diff` at a point (N7-uniform odd-step brick, curve-generic) (`φ_ψ_diff_evalEval`: for an arbitrary Weierstrass curve `W` over any `CommRing R`, all `m n : ℤ` and every point `(x,y) : R`, `φₙ(P)·ψₘ(P)² − φₘ(P)·ψₙ(P)² = ψ(m+n)(P)·ψ(m−n)(P)` with `·(P) = evalEval x y` — the Silverman ω-free x-coordinate difference identity `φ_ψ_diff` transported from the bivariate ring `R[X][Y]` to a point by the `evalEval` ring hom. This is the scalar identity the open N7-uniform target's `odd_x_algebra` wall (`Ecdlp/Targets/n7_uniform_carrier_induction.lean`) reduces to at `(m,n)=(k+1,k)`: the secant `x`-coordinate of two consecutive multiples `kP,(k+1)P` pinned to the canonical ratio at index `2k+1`. Honest scope: the point-level identity only; closing the wall additionally needs the secant-`addX` algebra and the `Carrier` y-coupling that pins `Yₖ,Yₖ₊₁`. Proof: `congrArg (evalEval x y)` over the proved `φ_ψ_diff` + `evalEval_mul`/`sub`/`pow` distribution — the idiom of `OmegaRecurrenceAnchors`. No `native_decide`, no new axioms)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Polynomial.evalEval`, `evalEval_mul`/`sub`/`pow`) + repo `φ_ψ_diff
Point-level 3-torsion bridge 3•P = 0 ⟺ ψ₃(P)=0 (secp256k1_three_nsmul_eq_zero_iff: for a nonzero affine P=(x,y) on secp256k1, the group relation 3•P=0 holds iff the 3-divi…
Ecdlp.Curve.secp256k1_three_nsmul_eq_zero_iff
Full ledger claim and scope
Point-level 3-torsion bridge `3•P = 0 ⟺ ψ₃(P)=0` (`secp256k1_three_nsmul_eq_zero_iff`: for a nonzero affine `P=(x,y)` on secp256k1, the group relation `3•P=0` holds iff the 3-division polynomial vanishes — the full `ψ₃ ↔ E[3]` equivalence, upgrading the forward-only `Ψ₃`-root fact; original elementary proof via the doubling identity `addX−x = −(3x⁴+84x)/(4y²)`, the n=3 analogue of the n=2 bridge)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Affine.Point` group law, `slope`/`addX`/`addY`/`negY`) + `linear_combination
ECDLP
Kernel + compiler
#
Point-level 4-torsion bridge 4•P = 0 ⟺ ψ₄(P)=0 (secp256k1_four_nsmul_eq_zero_iff: for a nonzero affine P=(x,y) on secp256k1, 4•P=0 iff the 4-division polynomial vanishes —…
Ecdlp.Curve.secp256k1_four_nsmul_eq_zero_iff
Full ledger claim and scope
Point-level 4-torsion bridge `4•P = 0 ⟺ ψ₄(P)=0` (`secp256k1_four_nsmul_eq_zero_iff`: for a nonzero affine `P=(x,y)` on secp256k1, `4•P=0` iff the 4-division polynomial vanishes — the even-index member of the `{2,3,5,7}` torsion-bridge family. Runs by doubling-of-doubling: `4•P=2•(2•P)`, so `4•P=0 ⟺ Y(2•P)=0` (2-torsion of the double, via `secp256k1_two_nsmul_eq_zero_iff`), and the landed doubling `y`-coordinate `Y(2•P)=ω₂/(2y)³` (`secp256k1_two_nsmul_coords`) gives `Y(2•P)=0 ⟺ ω₂(x)=0 ⟺ ψ₄(P)=4y·ω₂=0`, with `ω₂=x⁶+140x³−392`. The `n=4` non-degeneracy leaf of the uniform carrier. Inherits `Lean.ofReduceBool` from the `2≠0` fact (`native_decide`); no new axioms)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Affine.Point` group law, `two_nsmul`/`add_nsmul`) + `secp256k1_two_nsmul_coords`/`secp256k1_two_nsmul_eq_zero_iff
Point-level 5-torsion bridge 5•P = 0 ⟺ ψ₅(P)=0 (secp256k1_five_nsmul_eq_zero_iff: for a nonzero affine P=(x,y) on secp256k1, 5•P=0 holds iff the 5-division polynomial vani…
Ecdlp.Curve.secp256k1_five_nsmul_eq_zero_iff
Full ledger claim and scope
Point-level 5-torsion bridge `5•P = 0 ⟺ ψ₅(P)=0` (`secp256k1_five_nsmul_eq_zero_iff`: for a nonzero affine `P=(x,y)` on secp256k1, `5•P=0` holds iff the 5-division polynomial vanishes — the full `ψ₅ ↔ E[5]` equivalence, the n=5 analogue of the n=2/n=3 bridges; original elementary proof via the route `5•P=0 ⟺ x(2P)=x(3P) ⟺ ψ₅=0`, the core `x`-difference identity designed by a sympy-verified certificate and re-checked by the Lean kernel; reuses the merged n=2/n=3 bridges to close the degenerate branches)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Affine.Point` group law, `add_self_of_Y_ne`/`add_some`/`slope`) + `linear_combination` + n=2/n=3 bridges
Point-level 7-torsion bridge 7•P = 0 ⟺ ψ₇(P)=0 (secp256k1_seven_nsmul_eq_zero_iff: for a nonzero affine P=(x,y) on secp256k1, 7•P=0 holds iff the 7-division polynomial van…
Ecdlp.Curve.secp256k1_seven_nsmul_eq_zero_iff
Full ledger claim and scope
Point-level 7-torsion bridge `7•P = 0 ⟺ ψ₇(P)=0` (`secp256k1_seven_nsmul_eq_zero_iff`: for a nonzero affine `P=(x,y)` on secp256k1, `7•P=0` holds iff the 7-division polynomial vanishes — the full `ψ₇ ↔ E[7]` equivalence, the n=7 analogue of the n=2/n=3/n=5 bridges; original elementary proof via the route `7•P=0 ⟺ x(3P)=x(4P) ⟺ ψ₇=0`, the core slope-algebra identity designed by a sympy-verified certificate and re-checked by the Lean kernel; reuses the merged n=3 bridge to close the 3-torsion branch)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Affine.Point` group law, `add_self_of_Y_ne`/`add_some`/`slope`) + `linear_combination` + n=3 bridge
ECDLP
Kernel + compiler
#
Point-level doubling 2•P = (Φ₂/Ψ₂Sq, ω₂/(2y)³) on secp256k1's group (N7-uniform S3a) (secp256k1_two_nsmul_coords: for a nonsingular non-2-torsion P=(x,y) on y²=x³+7, if th…
Ecdlp.Curve.secp256k1_two_nsmul_coords
Full ledger claim and scope
Point-level doubling `2•P = (Φ₂/Ψ₂Sq, ω₂/(2y)³)` on secp256k1's group (N7-uniform S3a) (`secp256k1_two_nsmul_coords`: for a nonsingular non-2-torsion `P=(x,y)` on `y²=x³+7`, if the double `2 • Point.some x y h` is the affine point `Point.some X Y h'` then both coordinates are pinned to their division-polynomial values: `X = Φ₂(x)/Ψ₂Sq(x)` and `Y = (x⁶+140x³−392)/(2y)³`. Connects the two landed coordinate identities to the actual group operation `2 • P` on `secp256k1.toAffine.Point` (via `two_nsmul` + `Point.add_self_of_Y_ne` + the doubled point's coordinate injectivity) — the `n=2` Point-level instance of the open target `n7_uniform_secp256k1_x` and the base case of node S3a of the N7-uniform build. Honest scope: fixed `n=2` only; the uniform statement for all `n` remains open. No `native_decide`, no new axioms)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`two_nsmul`, `Affine.Point.add_self_of_Y_ne`, `injection`) + the landed n=2 x-/y-formulas
Pollard rho ρ-shape: sequence is eventually periodic
Ecdlp.GenericGroup.pollard_rho_periodic
- Domain
- ecdlp-ledger
- Method
- Mathlib
Pollard rho: a collision exists within card steps (pigeonhole)
Ecdlp.GenericGroup.pollard_rho_collision
Full ledger claim and scope
Pollard rho: a collision exists within `card` steps (pigeonhole)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
Projective smoothness of Y²Z=X³+bZ³ — Jacobian criterion, Mathlib Nonsingular (curveB_toProjective_nonsingular: over any field with 2,3,b≠0, every projective point P≠0 o…
Ecdlp.Curve.curveB_toProjective_nonsingular
Full ledger claim and scope
Projective smoothness of `Y²Z=X³+bZ³` — Jacobian criterion, Mathlib `Nonsingular` (`curveB_toProjective_nonsingular`: over any field with `2,3,b≠0`, every projective point `P≠0` on `Y²Z=X³+bZ³` is `WeierstrassCurve.Projective.Nonsingular` — obtained by rewriting `Nonsingular` to Mathlib's three `pderiv`-defined partials `−3X²`, `2YZ`, `Y²−3bZ²` via `nonsingular_iff`, then discharging the disjunction with the self-contained two-chart core `jacobian_core` (affine chart `Z≠0` + point at infinity `[0:1:0]`). Specialized to `b=7,𝔽_p` as `secp256k1_projective_nonsingular` and `secp256k1_infinity_nonsingular`; companion discriminant `curveB_Δ = −432b²`. FBL-PURE-001; no `native_decide`, no new axioms)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Projective.nonsingular_iff`/`equation_iff`, `mul_eq_zero`, `pow_ne_zero`) + `linear_combination
Reusable ≤2-to-1 torsion fiber-counting lemma (secp256k1_torsion_ncard_le: if every nonzero n-torsion x-coord lies in a finite set of size ≤ m, then #{P | n•P=0} ≤ 2m+1 —…
Ecdlp.Curve.secp256k1_torsion_ncard_le
Full ledger claim and scope
Reusable ≤2-to-1 torsion fiber-counting lemma (`secp256k1_torsion_ncard_le`: if every nonzero `n`-torsion `x`-coord lies in a finite set of size ≤ m, then `#{P | n•P=0} ≤ 2m+1` — at most two `y` per `x` on the curve, plus the identity; the general counting core behind the `#E[n] ≤ n²` bounds)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Finset.card_le_mul_card_image`, `card_roots'`, `Set.ncard_eq_toFinset_card'`)
Schnorr soundness over secp256k1 scalar field
Ecdlp.Secp256k1Schnorr.secp256k1_schnorr_extract
- Domain
- ecdlp-ledger
- Method
- Mathlib
Schnorr special soundness / witness extraction
Ecdlp.Schnorr.schnorr_extract
- Domain
- ecdlp-ledger
- Method
- Mathlib
Schnorr/EdDSA signature correctness (completeness) s·G = R + c·P
Ecdlp.Schnorr.schnorr_verify
Full ledger claim and scope
Schnorr/EdDSA signature correctness (completeness) `s·G = R + c·P
- Domain
- ecdlp-ledger
- Method
- Mathlib
Schnorr: extracted witness is unique
Ecdlp.Schnorr.schnorr_witness_unique
- Domain
- ecdlp-ledger
- Method
- Mathlib
Semaev forward direction generalized to all n — the resultant recursion engine (resultant_eq_zero_of_common_root: for *any* two univariate polynomials f, g over a commutativ…
Ecdlp.Semaev.resultant_eq_zero_of_common_root
Full ledger claim and scope
Semaev forward direction generalized to all `n` — the resultant recursion engine (`resultant_eq_zero_of_common_root`: for *any* two univariate polynomials `f, g` over a commutative ring sharing an evaluation-root `X₀` (`f(X₀) = g(X₀) = 0`), `Res(f,g,m,n) = 0`, provided the Sylvester sizes are not both zero. Every Semaev step `Sₙ₊₁ = Res_X(Sₙ(…,X), S₃(…,X))` inherits its forward direction from this one lemma at level `n`; `S₄_eq_zero_of_common_root` is now literally the instance `f = S₃(x₁,x₂,·)`, `g = S₃(x₃,x₄,·)`, and `S₅, S₆, …` are discharged verbatim with `f` the previous slice. The mechanism-level generalization of the Semaev forward direction to the whole infinite `Sₙ` family — via the Bézout identity `exists_mul_add_mul_eq_C_resultant`, over any commutative ring, no field or closure)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`exists_mul_add_mul_eq_C_resultant`)
Semaev polynomial has degree exactly 2 in each variable (secp256k1_S₃poly_natDegree: for x₁ ≠ x₂ over 𝔽_p, S₃(x₁,x₂,·) is a degree-exactly-2 univariate polynomial, leading…
Ecdlp.Semaev.secp256k1_S₃poly_natDegree
Full ledger claim and scope
Semaev polynomial has degree exactly 2 in each variable (`secp256k1_S₃poly_natDegree`: for `x₁ ≠ x₂` over `𝔽_p`, `S₃(x₁,x₂,·)` is a degree-exactly-2 univariate polynomial, leading coefficient `(x₁−x₂)² ≠ 0`. Base case of the classical `deg_{xᵢ} Sₘ = 2^{m−2}` degree tower — the doubling that makes higher-order decompositions blow up. Via `Polynomial.natDegree_quadratic`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Polynomial.natDegree_quadratic`)
Semaev's 3rd summation polynomial — forward direction (S₃_eq_zero_of_chord: for y² = x³ + a·x + b over a field, if (x₁,y₁), (x₂,y₂) are curve points with x₁ ≠ x₂ and x₃…
Ecdlp.Semaev.S₃_eq_zero_of_chord, secp256k1_semaev_three_chord
Full ledger claim and scope
Semaev's 3rd summation polynomial — forward direction (`S₃_eq_zero_of_chord`: for `y² = x³ + a·x + b` over a field, if `(x₁,y₁), (x₂,y₂)` are curve points with `x₁ ≠ x₂` and `x₃` is the `x`-coordinate of their chord-sum, then `S₃(x₁,x₂,x₃) = 0` — equivalently `P₁+P₂+P₃ = O ⇒ S₃ = 0`; `secp256k1_semaev_three_chord` specializes it to secp256k1 `y² = x³ + 7`. First Semaev summation polynomial formalized in Lean/Mathlib (a green-field `BARRIERS.md` item). Certificate designed + verified by exact symbolic elimination (sympy: Gröbner + iterated resultant), kernel-checked via `linear_combination`. A construction, not an attack — a necessary collinearity condition that by itself computes nothing about any discrete log)
- Domain
- ecdlp-ledger
- Method
- Mathlib field algebra (`linear_combination`)
Semaev's 4th summation polynomial S₄ — definition + forward direction (S₄ = Res_X(S₃(x₁,x₂,X), S₃(x₃,x₄,X)) via Mathlib's Polynomial.resultant _ _ 2 2; S₄_eq_zero_of_common…
Ecdlp.Semaev.S₄, S₄_eq_zero_of_common_root, secp256k1_semaev_four_of_common_root
Full ledger claim and scope
Semaev's 4th summation polynomial `S₄` — definition + forward direction (`S₄ = Res_X(S₃(x₁,x₂,X), S₃(x₃,x₄,X))` via Mathlib's `Polynomial.resultant _ _ 2 2`; `S₄_eq_zero_of_common_root`: a shared root `X₀` of the two `S₃` slices — e.g. `X₀ = x(P₁+P₂) = x(P₃+P₄)` — forces `S₄ = 0`, over any commutative ring, via the resultant Bézout identity `exists_mul_add_mul_eq_C_resultant`. `secp256k1_semaev_four_of_common_root` specializes to secp256k1. The first rung above `S₃` — the recursion index calculus over `𝔽_{p^k}` uses. First `S₄` in Lean)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Polynomial.resultant`, `exists_mul_add_mul_eq_C_resultant`)
Semaev's S₃ on actual secp256k1 curve points (secp256k1_semaev_three_point: for genuine points of the Mathlib elliptic curve secp256k1.toAffine.Point, the group relation P₁…
Ecdlp.Semaev.secp256k1_semaev_three_point
Full ledger claim and scope
Semaev's `S₃` on actual secp256k1 curve points (`secp256k1_semaev_three_point`: for genuine points of the Mathlib elliptic curve `secp256k1.toAffine.Point`, the group relation `P₁+P₂+P₃ = O` with `x(P₁) ≠ x(P₂)` implies `S₃(x₁,x₂,x₃) = 0`. Connects the abstract chord identity to Mathlib's formalized elliptic-curve group law by unfolding `Point.add_of_X_ne` / `slope` / `addX` to recover `x₃ = x(P₁+P₂)` — the honest statement whose hypothesis is the actual curve addition, not a raw coordinate equation)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Point.add_of_X_ne`, `div_eq_iff`, `linear_combination`)
Semaev's S₃ on actual secp256k1 points — tangent case (secp256k1_semaev_three_point_double: the P₁ = P₂ companion — for genuine points of secp256k1.toAffine.Point, 2•P₁ +…
Ecdlp.Semaev.secp256k1_semaev_three_point_double
Full ledger claim and scope
Semaev's `S₃` on actual secp256k1 points — tangent case (`secp256k1_semaev_three_point_double`: the `P₁ = P₂` companion — for genuine points of `secp256k1.toAffine.Point`, `2•P₁ + P₃ = O` with `P₁` not 2-torsion (`y₁ ≠ negY x₁ y₁`) implies `S₃(x₁,x₁,x₃) = 0`, via Mathlib's tangent doubling `Point.add_of_Y_ne`. With the chord point theorem, the `S₃` forward direction now holds on Mathlib's actual elliptic-curve group law in every nondegenerate case)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Point.add_of_Y_ne`, `div_eq_iff`)
Semaev's S₃ — full characterization (iff) (S₃_eq_zero_iff: for on-curve (x₁,y₁), (x₂,y₂) with x₁ ≠ x₂, S₃(x₁,x₂,x₃) = 0 ⟺ (x₁−x₂)²(x₁+x₂+x₃) = (y₂−y₁)² ∨ = (y₂+y₁)² — i.…
Ecdlp.Semaev.S₃_eq_zero_iff, secp256k1_semaev_three_iff
Full ledger claim and scope
Semaev's `S₃` — full characterization (iff) (`S₃_eq_zero_iff`: for on-curve `(x₁,y₁), (x₂,y₂)` with `x₁ ≠ x₂`, `S₃(x₁,x₂,x₃) = 0 ⟺ (x₁−x₂)²(x₁+x₂+x₃) = (y₂−y₁)² ∨ = (y₂+y₁)²` — i.e. `x₃` is the `x`-coordinate of `P₁+P₂` or of `P₁−P₂`; `secp256k1_semaev_three_iff` specializes to secp256k1. Combines forward + reverse: the complete statement of `S₃` as the elimination of `y₁,y₂` from "three points sum to `O`")
- Domain
- ecdlp-ledger
- Method
- Mathlib
Semaev's S₃ — reverse direction (the two roots) (S₃_root_of_eq_zero: S₃ is quadratic in x₃ with leading coefficient (x₁−x₂)²; if (x₁,y₁), (x₂,y₂) lie on y² = x³ + a·x…
Ecdlp.Semaev.S₃_root_of_eq_zero
Full ledger claim and scope
Semaev's `S₃` — reverse direction (the two roots) (`S₃_root_of_eq_zero`: `S₃` is quadratic in `x₃` with leading coefficient `(x₁−x₂)²`; if `(x₁,y₁), (x₂,y₂)` lie on `y² = x³ + a·x + b` and `S₃(x₁,x₂,x₃) = 0`, then `(x₁−x₂)²·x₃` equals `(y₂−y₁)² − (x₁+x₂)(x₁−x₂)²` or `(y₂+y₁)² − (x₁+x₂)(x₁−x₂)²` — the cleared `x`-coordinates of `P₁+P₂` and `P₁−P₂`. Via a sympy-certified master factorization `(x₁−x₂)²·S₃ = (D·x₃−R₊)(D·x₃−R₋)`, a pure `ring` identity, then `mul_eq_zero`; needs no `x₁ ≠ x₂`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`linear_combination`, `mul_eq_zero`)
Semaev's S₃ — tangent / doubling case (S₃_eq_zero_of_tangent: the x₁ = x₂ companion of the chord case — if (x₁,y₁) is a curve point and x₃ is the x-coordinate of 2·(x…
Ecdlp.Semaev.S₃_eq_zero_of_tangent, secp256k1_semaev_three_tangent
Full ledger claim and scope
Semaev's `S₃` — tangent / doubling case (`S₃_eq_zero_of_tangent`: the `x₁ = x₂` companion of the chord case — if `(x₁,y₁)` is a curve point and `x₃` is the `x`-coordinate of `2·(x₁,y₁)` (cleared doubling form `4·y₁²·(x₃+2·x₁) = (3·x₁²+a)²`), then `S₃(x₁,x₁,x₃) = 0`; `secp256k1_semaev_three_tangent` specializes to secp256k1. With the chord case this completes the `S₃` forward direction in every nondegenerate case. No `y₁·y₂` cross term arises, so a single certified `linear_combination` suffices)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`linear_combination`)
Semaev's S₄ — reverse/meaning direction (S₄_common_root_of_eq_zero: over a field, for on-curve (x₁,y₁), (x₂,y₂) with x₁ ≠ x₂ and S₄(x₁,x₂,x₃,x₄) = 0, the two S₃ slices…
Ecdlp.Semaev.S₄_common_root_of_eq_zero, secp256k1_semaev_four_common_root_of_eq_zero
Full ledger claim and scope
Semaev's `S₄` — reverse/meaning direction (`S₄_common_root_of_eq_zero`: over a field, for on-curve `(x₁,y₁), (x₂,y₂)` with `x₁ ≠ x₂` and `S₄(x₁,x₂,x₃,x₄) = 0`, the two `S₃` slices share a root `X₀` in the field — the converse of `S₄_eq_zero_of_common_root`. Since `S₄` is the resultant, its vanishing forces a shared root; it lies *in* `K` because `S₃(x₁,x₂,·)` splits with the explicitly known roots `x(P₁±P₂)`. Via `resultant_eq_prod_eval`; `secp256k1_semaev_four_common_root_of_eq_zero` specializes. With the forward direction, `S₄` now holds both ways)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Polynomial.resultant_eq_prod_eval`)
Shamir secret-sharing reconstruction (shamir_reconstruct: for a degree-<t sharing polynomial f and t = #s distinct nodes, f.eval 0 (the secret) = (Lagrange.interpolate…
Ecdlp.Schnorr.shamir_reconstruct
Full ledger claim and scope
Shamir secret-sharing reconstruction (`shamir_reconstruct`: for a degree-`<t` sharing polynomial `f` and `t = #s` distinct nodes, `f.eval 0` (the secret) `= (Lagrange.interpolate s v (f.eval ∘ v)).eval 0` — the information-theoretic recovery direction of Shamir's `(t,n)` SSS; secret = `f(0)`, shares = `(vᵢ, f(vᵢ))`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Lagrange.eq_interpolate`)
Somos-4 recurrence for normEDS (normEDS_somos4: normEDS(m+2)·normEDS(m−2) = b²·normEDS(m+1)·normEDS(m−1) − c·normEDS(m)² for all m:ℤ over any CommRing — the n=2 slice…
Ecdlp.NormEDS.normEDS_somos4
Full ledger claim and scope
Somos-4 recurrence for `normEDS` (`normEDS_somos4`: `normEDS(m+2)·normEDS(m−2) = b²·normEDS(m+1)·normEDS(m−1) − c·normEDS(m)²` for all `m:ℤ` over any `CommRing` — the `n=2` slice of Ward's master recurrence and the companion identity for the open Mathlib TODO "`normEDS` is elliptic"; single-parameter `normEDSRec'` strong induction, `b²`-cancellation over the domain `MvPolynomial (Fin 3) ℤ`, reflected by `normEDS_neg` and transported to any `CommRing` via `map_normEDS`; second upstream-Mathlib stepping stone toward L4, see `notes/L4_WARD_INDUCTION.md`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`normEDSRec'`, `normEDS_even`/`normEDS_odd`, `map_normEDS`) + `linear_combination
ECDLP
Kernel + compiler
#
Squarefree division polynomials ψₙ over 𝔽_p, n∈{3,4,5,7} (secp256k1_isCoprime_Ψ₃_derivative + preΨ₄/preΨ₅/preΨ₇ analogues: IsCoprime ψₙ (derivative ψₙ) over 𝔽_p…
Ecdlp.Curve.secp256k1_isCoprime_Ψ₃_derivative, secp256k1_isCoprime_preΨ₄_derivative
Full ledger claim and scope
Squarefree division polynomials `ψₙ` over `𝔽_p`, `n∈{3,4,5,7}` (`secp256k1_isCoprime_Ψ₃_derivative` + `preΨ₄`/`preΨ₅`/`preΨ₇` analogues: `IsCoprime ψₙ (derivative ψₙ)` over `𝔽_p` — the field squarefreeness certificate for the small division polynomials (incl. the even-index primitive-4-division `preΨ₄`, `secp256k1_isCoprime_preΨ₄_derivative`), node B4 at small `n`, via explicit extended-Euclid Bézout certificates `u·ψₙ+v·ψₙ′=1`. Scope is purely the `𝔽_p`-polynomial fact — no `𝔽̄_p`, no root count, no torsion is asserted here; the downstream `𝔽̄_p` root-count consumes exactly this. `native_decide` residue certs, no new axioms; general-`n` B4 open)
- Domain
- ecdlp-ledger
- Method
- Bézout `native_decide` (`Polynomial.derivative`, `IsCoprime`)
S₃-slice two-root factorization over F[X] (S₃poly_master_factor: (x₁−x₂)²·S₃poly = (D·X − R₊)·(D·X − R₋) as a polynomial identity in F[X] — the lift of the scalar master…
Ecdlp.Semaev.S₃poly_master_factor
Full ledger claim and scope
S₃`-slice two-root factorization over `F[X]` (`S₃poly_master_factor`: `(x₁−x₂)²·S₃poly = (D·X − R₊)·(D·X − R₋)` as a polynomial identity in `F[X]` — the lift of the scalar master factorization, exhibiting `S₃`'s degree-2 slice as split with the explicit roots `x(P₁±P₂)`; the key input to the `S₄` reverse)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`linear_combination` over `F[X]`)
Taproot key-tweak verification (BIP-341 key-path spend, Q=P+t·G)
Ecdlp.Schnorr.taproot_tweak_verify
Full ledger claim and scope
Taproot key-tweak verification (BIP-341 key-path spend, `Q=P+t·G`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
The concrete secp256k1 subgroup ⟨G⟩ is a ZMod n-module (secp256k1_grp_nsmul_eq_zero: every point of ⟨G⟩ = zmultiples secp256k1G is annihilated by n, so ⟨G⟩ carries a …
Ecdlp.Curve.secp256k1_grp_nsmul_eq_zero (+ the Module (ZMod n) ↥⟨G⟩ instance, secp256k1Gₙ)
Full ledger claim and scope
The concrete secp256k1 subgroup `⟨G⟩` is a `ZMod n`-module (`secp256k1_grp_nsmul_eq_zero`: every point of `⟨G⟩ = zmultiples secp256k1G` is annihilated by `n`, so `⟨G⟩` carries a `Module (ZMod n)` structure built via `AddCommGroup.zmodModule`. This realises the abstract discrete-log model on a genuine elliptic-curve group — Mathlib provides no automatic `ZMod n`-module on a cyclic subgroup; it must be constructed from the exponent bound, which the weak keystone `addOrderOf secp256k1G = n` supplies. The bridge that lets every abstract protocol theorem instantiate on real `WeierstrassCurve.Affine.Point` values)
- Domain
- ecdlp-ledger
- Method
- secp256k1_generator_addOrderOf` + Mathlib (`AddCommGroup.zmodModule`, `zmultiples_le_torsionBy`)
The discrete-log map is a group isomorphism ZMod n ≃+ ⟨G⟩ (secp256k1_dlogEquiv: base-point multiplication c ↦ c·G is an additive-group isomorphism between the scalar ring Z…
Ecdlp.Curve.secp256k1_dlogEquiv (+ secp256k1_dlogHom, _injective, _surjective, secp256k1_gen_addOrderOf)
Full ledger claim and scope
The discrete-log map is a group isomorphism `ZMod n ≃+ ⟨G⟩` (`secp256k1_dlogEquiv`: base-point multiplication `c ↦ c·G` is an additive-group isomorphism between the scalar ring `ZMod n` and the concrete secp256k1 subgroup `⟨G⟩` — the exact group-theoretic content of the ECDLP setting: the discrete log `dlog = (c ↦ c·G)⁻¹` is a well-defined bijection. Its *computational* inversion is the open ECDLP hardness conjecture; this asserts only the unconditional bijection, via injective (`c.val < n = addOrderOf G`) + surjective (`zmultiples`) on the `ZMod n`-module `⟨G⟩`. Built with `AddEquiv.ofBijective`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`AddEquiv.ofBijective`, `Nat.cast_smul_eq_nsmul`, `Int.cast_smul_eq_zsmul`, `ZMod.val_lt`)
ECDLP
Kernel + compiler
#
The exact curve cardinality #E(𝔽_p) = n — cofactor 1, without Hasse or Schoof (secp256k1_card_point_eq_n: Nat.card secp256k1.toAffine.Point = Secp256k1.n).
Ecdlp.Curve.secp256k1_card_point_eq_n, secp256k1_no_nonzero_two_torsion, secp256k1_card_point_le
Full ledger claim and scope
The exact curve cardinality `#E(𝔽_p) = n` — cofactor 1, without Hasse or Schoof (`secp256k1_card_point_eq_n`: `Nat.card secp256k1.toAffine.Point = Secp256k1.n`). A curve-specific certificate that upgrades `n ∣ #E` to equality using the special structure of `E : Y² = X³ + 7` over `p ≡ 1 (mod 3)`: `#E ≤ 2p+1` (`secp256k1_card_point_le`, ≤2 `y` per `x`) and `2p+1 < 3n` force `#E ∈ {n, 2n}`; `2n` (even) is excluded because additive Cauchy would yield a nonzero 2-torsion point, but `E[2] = {O}` (`secp256k1_no_nonzero_two_torsion`: `2•P=0 ⟹ P=0`, since `y=0 ⟹ x³=−7` and `−7` is not a cube in `𝔽_p`, `(−7)^((p−1)/3)≠1`). Removes the last standing assumption behind Units 1–2 (the published order `n` as `#E`). Uses `native_decide` for the 256-bit non-cube leaf and the literal arithmetic (`Lean.ofReduceBool`); numeric facts independently re-checked in `scripts/certs/cardinality_secp256k1.py`, prints `CERT_OK`)
- Domain
- ecdlp-ledger
- Method
- native_decide + Mathlib (`exists_prime_addOrderOf_dvd_card`, `ZMod.pow_card_sub_one_eq_one`, `Finset.card_le_mul_card_image`) + repo bricks
ECDLP
Kernel + compiler
#
The full point-group structure theorem: E(𝔽_p) ≃+ ℤ/n (secp256k1_pointGroupEquiv: base-point multiplication c ↦ c·G is an additive-group isomorphism from the scalar ring ZM…
Ecdlp.Curve.secp256k1_pointGroupEquiv (+ secp256k1_point_group_equiv_exists)
Full ledger claim and scope
The full point-group structure theorem: `E(𝔽_p) ≃+ ℤ/n` (`secp256k1_pointGroupEquiv`: base-point multiplication `c ↦ c·G` is an additive-group isomorphism from the scalar ring `ZMod n` onto the entire rational-point group `E(𝔽_p)`, not merely `⟨G⟩`. Lifts the subgroup discrete-log iso `secp256k1_dlogEquiv` off `⟨G⟩` by transporting across cofactor 1 `⟨G⟩ = ⊤` (`AddEquiv.addSubgroupCongr secp256k1_grp_eq_top`) then stripping the `⊤` subtype (`AddSubgroup.topEquiv`). The complete group-theoretic classification of secp256k1's points: cyclic of order `n`, i.e. `≅ ℤ/n`. Unconditional given `#E = n`; computational inversion is the open ECDLP conjecture, the bijection is a theorem. Inherits `Lean.ofReduceBool` through the order keystone)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`AddEquiv.addSubgroupCongr`, `AddSubgroup.topEquiv`, `AddEquiv.trans`) + `secp256k1_dlogEquiv` + `secp256k1_grp_eq_top
The secp256k1 crypto subgroup ⟨G⟩ is cyclic of order exactly n (secp256k1_grp_card: Nat.card ⟨G⟩ = n, from Nat.card (zmultiples g) = addOrderOf g + the weak keystone; s…
Ecdlp.Curve.secp256k1_grp_card, secp256k1_grp_isAddCyclic
Full ledger claim and scope
The secp256k1 crypto subgroup `⟨G⟩` is cyclic of order exactly `n` (`secp256k1_grp_card`: `Nat.card ⟨G⟩ = n`, from `Nat.card (zmultiples g) = addOrderOf g` + the weak keystone; `secp256k1_grp_isAddCyclic`: `IsAddCyclic ⟨G⟩`. The group-object-level statement of "⟨G⟩ is a concrete cyclic group of order `n`" — no Hasse/`#E`, only `addOrderOf G = n`)
- Domain
- ecdlp-ledger
- Method
- secp256k1_generator_addOrderOf` + Mathlib (`Nat.card_zmultiples`)
The whole point group equals ⟨G⟩ — E(𝔽_p) is cyclic, glvPoint = [λ] unconditional (secp256k1_grp_eq_top: secp256k1Grp = ⊤, from #⟨G⟩ = n = #E via AddSubgroup.eq_top_o…
Ecdlp.Curve.secp256k1_grp_eq_top, secp256k1_point_isAddCyclic, secp256k1_mem_zmultiples, secp256k1_glvHom_eq_zsmul_unconditional
Full ledger claim and scope
The whole point group equals `⟨G⟩` — `E(𝔽_p)` is cyclic, `glvPoint = [λ]` unconditional (`secp256k1_grp_eq_top`: `secp256k1Grp = ⊤`, from `#⟨G⟩ = n = #E` via `AddSubgroup.eq_top_of_card_eq`). Upgrades every `⟨G⟩`-only result to the full rational-point group now that `#E = n` is proved: `secp256k1_point_isAddCyclic` (`IsAddCyclic E(𝔽_p)`, an instance), `secp256k1_mem_zmultiples` (every point is a multiple of `G`), and `secp256k1_glvHom_eq_zsmul_unconditional` (the GLV eigenvalue property with the `[IsAddCyclic]` hypothesis now discharged — `glvHom = [k]` with `k²+k+1` annihilating every point, no remaining hypotheses). Resolves the `⟨G⟩`-vs-`E(𝔽_p)` scope ambiguity. Pure-kernel on top of the keystone
- Domain
- ecdlp-ledger
- Method
- Mathlib (`AddSubgroup.eq_top_of_card_eq`, `AddSubgroup.topEquiv`) + `secp256k1_card_point_eq_n
Threshold ElGamal partial-decryption combination
Ecdlp.Schnorr.threshold_elgamal_combine
- Domain
- ecdlp-ledger
- Method
- Mathlib
Tight #E[2] ≤ 4 point-cardinality bound (secp256k1_two_torsion_ncard_le: Set.ncard {P \| 2•P=0} ≤ 4 — the tight (ℤ/2)² ceiling, closing an asserted-but-unproven gap where…
Ecdlp.Curve.secp256k1_two_torsion_ncard_le
Full ledger claim and scope
Tight `#E[2] ≤ 4` point-cardinality bound (`secp256k1_two_torsion_ncard_le`: `Set.ncard {P \| 2•P=0} ≤ 4` — the tight `(ℤ/2)²` ceiling, closing an asserted-but-unproven gap where only the x-coordinate bound existed; the 2-torsion `y=0` fiber is 1-to-1, giving 4 not the generic ≤ 7)
- Domain
- ecdlp-ledger
- Method
- secp256k1_two_nsmul_eq_zero_iff` + Mathlib (`card_roots'`, `Set.ncard_insert_le`)
Tight #E[4](𝔽_p) ≤ 16 point-cardinality bound (secp256k1_four_torsion_ncard_le: Set.ncard {P \| 4•P=0} ≤ 16 = 4² — the even-index entry of the #E[n] count family, at the t…
Ecdlp.Curve.secp256k1_four_torsion_ncard_le
Full ledger claim and scope
Tight `#E[4](𝔽_p) ≤ 16` point-cardinality bound (`secp256k1_four_torsion_ncard_le`: `Set.ncard {P \| 4•P=0} ≤ 16 = 4²` — the even-index entry of the `#E[n]` count family, at the tight value. `n=4` mixes self-paired 2-torsion (`y=0`) with `±y`-paired primitive 4-torsion, so instead of the generic `≤2m+1` we split `E[4] = E[2] ⊔ P₄` (`P₄ = {4•P=0, 2•P≠0}`): `#E[2] ≤ 4` (`secp256k1_two_torsion_ncard_le`) + a `≤2`-to-`1` fiber count `#P₄ ≤ 12` over the six `preΨ₄`-roots — via the 4-torsion bridge `4•P=0 ⟺ ψ₄=0` and `ψ₄=4y·(x⁶+140x³−392)`, a primitive point (`2•P≠0`⟹`y≠0`) forces `preΨ₄(x)=0`. `4+12=16`. Finiteness from the global `Finite W.Point` instance; reuses the `px`/`py` curve-fiber machinery of `TorsionPointCount`. The even-index tight companion of `#E[3]≤9`/`#E[5]≤25`/`#E[7]≤49`)
- Domain
- ecdlp-ledger
- Method
- secp256k1_four_nsmul_eq_zero_iff` + `secp256k1_two_torsion_ncard_le` + curve-fiber count + Mathlib
Torsion intersection = gcd (secp256k1_torsionBy_inf_eq_gcd: E[m] ⊓ E[n] = E[gcd m n] — the full lattice identity generalizing the coprime-disjoint leaf; via the addOrderOf ∣…
Ecdlp.Curve.secp256k1_torsionBy_inf_eq_gcd
Full ledger claim and scope
Torsion intersection = gcd (`secp256k1_torsionBy_inf_eq_gcd`: `E[m] ⊓ E[n] = E[gcd m n]` — the full lattice identity generalizing the coprime-disjoint leaf; via the `addOrderOf ∣ ·` characterization of `torsionBy`)
- Domain
- ecdlp-ledger
- Method
- secp256k1_mem_torsionBy_iff_addOrderOf_dvd` + Mathlib (`Nat.dvd_gcd`, `AddSubgroup.mem_inf`)
Universal frozen C16 → C2 projective witness-chain extraction (the actual universal binary output of frozenC k s is homogeneous of declared degree 2^(s+1), so its predecesso…
Ecdlp.FrozenProjectiveSemaev.projectiveOutputAtOver_frozenC_isHomogeneous, homogenize_previousSliceAtOver_frozenC, eval_homogenize_previousSliceAtOver_frozenC, homogenize_localSliceAt, eval_homogenize_localSliceAt, specializeOver_frozenC_eq_zero_iff_projectiveChain, specializeOver_frozenC16_eq_zero_iff_projectiveChain and supporting declarations
Full ledger claim and scope
Universal frozen `C16 → C2` projective witness-chain extraction (the actual universal binary output of `frozenC k s` is homogeneous of declared degree `2^(s+1)`, so its predecessor homogenization evaluates exactly as direct projective specialization for every valid `[U:V]`; the local degree-two homogenization evaluates exactly as literal `H`. Over an algebraically closed target field, vanishing of every mapped `frozenC k s` is iff a minimal left-associated `FrozenProjectiveChain`; at `s = 14`, `C16` uses leaves `q 0` through `q 15` and fourteen valid intermediate projective slots. `[0:0]` is excluded by type and `[1:0]` is allowed at every level. Honest scope: witnesses live in the algebraically closed target; no base-field descent, direct-S17, `RatCat`, `Recover`, system-materialization, rank, yield, or cost result is claimed)
- Domain
- ecdlp-ledger
- Method
- Mathlib exact homogenization + row-homogeneous Sylvester determinant + fixed-degree projective resultant induction
W3 closed at the function-field level — RegularAt and evaluation of abstract elements (FunctionFieldRegular.lean: the RegularAt predicate (∃ a b, evalAt b ≠ 0 ∧ f = a/b),…
Ecdlp.Weil.RegularAt, evalReg, evalRatAt_eq_evalReg (+ 14 supporting)
Full ledger claim and scope
W3 closed at the function-field level — `RegularAt` and evaluation of abstract elements (`FunctionFieldRegular.lean`: the `RegularAt` predicate (`∃ a b, evalAt b ≠ 0 ∧ f = a/b`), the unique value `evalReg` with its defining lemmas, and the two-way bridge to the localization: an element of `Localization.AtPrime (XYIdeal P)` maps to a `RegularAt` function (via `IsLocalization.surj` + `evalAt_ker` rewriting `b ∉ XYIdeal ⟺ evalAt b ≠ 0`), and conversely a regular presentation determines a localization element (`IsLocalization.mk'`), with the payoff weld `evalRatAt = evalReg` on the overlap. With this, every abstract function-field element regular at `P` has a well-defined value at `P` — the W3 evaluation half is closed end-to-end (`evalAt → evalRatAt → evalFracAt → a/b extraction → RegularAt`); next: `f_P(D_Q)` divisor evaluation and W4 reciprocity)
- Domain
- ecdlp-ledger
- Method
- IsLocalization.{surj,lift,mk'}`/`Ideal.primeCompl` (source-verified) + the W3 eval layer
W3 evaluation layer completed at the fraction level — evalFracAt + the Miller-representative nonvanishing (evalFracAt h a b := evalAt h a / evalAt h b with the representation-…
Ecdlp.Weil.evalFracAt_well_defined, evalFracAt_mul, evalAt_unit_ne_zero, evalRatAt_eq_evalFracAt, secp256k1_miller_eval_scaling
Full ledger claim and scope
W3 evaluation layer completed at the fraction level — `evalFracAt` + the Miller-representative nonvanishing (`evalFracAt h a b := evalAt h a / evalAt h b` with the representation-independence core `evalFracAt_well_defined` (cross-multiplication `a₁b₂ = a₂b₁` + nonvanishing denominators ⟹ equal values — transported through the ring hom `evalAt`, no domain instance needed), Miller-loop multiplicativity `evalFracAt_mul`, unit facts (`evalAt_unit_ne_zero`: coordinate-ring units never vanish at rational points; `evalFracAt_unit_mul`), and the bridge to the localization layer `evalRatAt_eq_evalFracAt` (an `a/b` presentation of a rational function regular at `P` evaluates identically under the residue map). Plus the secp256k1 Miller-layer theorem `secp256k1_miller_eval_scaling`: the W2 Miller-function representative ambiguity is a globally nonvanishing unit factor at every rational point — the well-definedness seed for the eventual `eₙ`. Honest scope: extracting an `a/b` presentation from an abstract `FunctionField` element is the documented next rung; curve-agnostic sections PR-able)
- Domain
- ecdlp-ledger
- Method
- evalAt`/`evalRatAt` layer + `secp256k1_miller_function_unique` (W2)
ECDLP
Kernel + compiler
#
Ward apparition rigidity — normEDS has no two consecutive zeros (normEDS_not_consecutive_zeros: over any integral domain, given ¬(b=0∧c=0) and ¬(c=0∧d=0), normEDS b c d…
Ecdlp.NormEDS.normEDS_not_consecutive_zeros
Full ledger claim and scope
Ward apparition rigidity — `normEDS` has no two consecutive zeros (`normEDS_not_consecutive_zeros`: over any integral domain, given `¬(b=0∧c=0)` and `¬(c=0∧d=0)`, `normEDS b c d` never vanishes at two consecutive integers — the scalar core of node N5; composed with the eval-bridge global descent it discharges `IsCoprime(Φₙ,ΨSqₙ)`. Minimal-zero rank-of-apparition argument via `normEDS_isEllSequence`'s `r=1` translation identity + `normEDS_odd`/`normEDS_neg`; upstream-Mathlib candidate, no `native_decide`, no new axioms; supporting helpers `normEDS_shift_mul_shift_of_eq_zero`/`normEDS_sub_eq_zero_of_eq_zero`/`normEDS_not_consecutive_zeros'` in the same file)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`normEDS_isEllSequence`, `normEDS_odd`/`normEDS_neg`)
Weil W3 — nonvanishing criterion at a point (evalRatAt_ne_zero_iff_isUnit: a rational function regular at P is nonzero at P iff it is a unit of the local ring F[E]_P — exa…
Ecdlp.Weil.evalRatAt_ne_zero_iff_isUnit
Full ledger claim and scope
Weil W3 — nonvanishing criterion at a point (`evalRatAt_ne_zero_iff_isUnit`: a rational function regular at `P` is nonzero at `P` iff it is a unit of the local ring `F[E]_P` — exactly the condition to evaluate a Miller function `f_P` to a nonzero value in `𝔽_p`, off its zero/pole support. Completes the *point-evaluation* half of Weil rung W3; `f_P(D_Q)` over a whole divisor and Weil reciprocity (W4) remain genuine Mathlib gaps — see `BARRIERS.md`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`IsLocalRing.mem_maximalIdeal`, `mem_nonunits_iff`)
Weil W3 — zero locus of point-evaluation (evalRatAt_eq_zero_iff: a rational function regular at P vanishes at P iff it lies in the maximal ideal of the local ring F[E]_P.
Ecdlp.Weil.evalRatAt_eq_zero_iff
Full ledger claim and scope
Weil W3 — zero locus of point-evaluation (`evalRatAt_eq_zero_iff`: a rational function regular at `P` vanishes at `P` iff it lies in the maximal ideal of the local ring `F[E]_P`. From `evalRatAt = residueFieldEquiv ∘ residue`: residue-field iso injective, so `evalRatAt r = 0 ↔ residue r = 0 ↔ r ∈ 𝔪`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`map_eq_zero_iff`, `Ideal.Quotient.eq_zero_iff_mem`)
Weil ladder W3e-1 — divisor evaluation f((Q)−(O)) is multiplicative in the function (divEval_mul: for f, g regular at both Q and O, divEval (f·g) = divEval f · divEval…
Ecdlp.Weil.divEval_mul, evalReg_mul
Full ledger claim and scope
Weil ladder W3e-1 — divisor evaluation `f((Q)−(O))` is multiplicative in the function (`divEval_mul`: for `f, g` regular at both `Q` and `O`, `divEval (f·g) = divEval f · divEval g`, where `divEval f := evalReg f Q / evalReg f O` is the value of `f` at the degree-0 divisor `(Q)−(O)`; via the pointwise multiplicativity `evalReg_mul` — `evalReg (f·g) = evalReg f · evalReg g` at a point, from `evalReg_eq` + `evalFracAt_mul`. The homomorphism property that makes `f_P(D_Q)` a map `E → μₙ` in the Weil pairing; first evaluation-half rung of `notes/WEIL_LADDER.md`)
- Domain
- ecdlp-ledger
- Method
- evalReg`/`evalFracAt` layer (`FunctionFieldRegular.lean`) + field algebra
Weil ladder W3e-2 — how the Miller representative enters divEval, and conditional representative-independence (divEval_smul_unit: for g = u·f with u a unit of F[E] and …
Ecdlp.Weil.divEval_smul_unit, divEval_smul_unit_eq, evalReg_smul_unit
Full ledger claim and scope
Weil ladder W3e-2 — how the Miller representative enters `divEval`, and conditional representative-independence (`divEval_smul_unit`: for `g = u·f` with `u` a unit of `F[E]` and `f, g` regular at `Q, O`, `divEval g = (u(Q)/u(O)) · divEval f` — the entire dependence of `divEval` on the choice of Miller function is the single ratio `u(Q)/u(O)`, from the pointwise `evalReg_smul_unit` = `evalReg (u·f) = u(P)·evalReg f` via `evalFracAt_unit_mul`; and `divEval_smul_unit_eq`: if additionally `u(Q) = u(O)` the ratio is `1`, so `divEval g = divEval f`. secp256k1 forms `secp256k1_divEval_miller_rep_scaling`/`_indep` apply this to the `secp256k1_miller_function_unique` ambiguity. Honest scope: unconditional independence needs `u(Q)=u(O)`, i.e. that units of `F[E]` are constants — absent from Mathlib v4.31, carried as an explicit hypothesis, not proved)
- Domain
- ecdlp-ledger
- Method
- evalReg`/`divEval` layer + `evalFracAt_unit_mul` + field algebra
Weil ladder W3e-3 — the raw pairing value's domain (support-disjointness bridge) + the divEval unit law (secp256k1_miller_jointly_regular: a Miller function f for (P,n) ha…
Ecdlp.Weil.secp256k1_miller_jointly_regular, divEval_one
Full ledger claim and scope
Weil ladder W3e-3 — the raw pairing value's domain (support-disjointness bridge) + the `divEval` unit law (`secp256k1_miller_jointly_regular`: a Miller function `f` for `(P,n)` has a fixed presentation `a/b`, and at any two points `A, B` where the single denominator `b` does not vanish — i.e. `A, B` off `supp(div f)` — `f` is regular at both, the joint-regularity hypothesis `divEval hA hB` consumes, from one geometric condition; and `divEval_one`/`evalReg_one`: `divEval 1 ((A)−(B)) = 1`, which with `divEval_mul` makes `divEval` a monoid hom on the functions regular at both points. Closes the reachable W3-evaluation scaffolding. Honest scope: this packages the raw value's domain + algebra; it does not assemble `eₙ(P,Q)` — that needs Weil reciprocity, the frozen W4 no-go, since the base point `O ∈ supp(div f_P)`)
- Domain
- ecdlp-ledger
- Method
- secp256k1_miller_function_regularAt` + `evalReg`/`divEval` layer
Weil-pairing foundations, rung 1 — torsion ⟺ principal divisor (secp256k1_torsion_iff_principal: a point P of secp256k1 is n-torsion ⟺ n • toClass P = 0, i.e.
Ecdlp.Weil.secp256k1_torsion_iff_principal
Full ledger claim and scope
Weil-pairing foundations, rung 1 — torsion ⟺ principal divisor (`secp256k1_torsion_iff_principal`: a point `P` of secp256k1 is `n`-torsion `⟺ n • toClass P = 0`, i.e. iff the divisor `n·([P] − [O])` is principal in the coordinate ring `F[secp256k1]`. Obtained by transporting `n`-torsion across Mathlib's Abel–Jacobi map `toClass : W.Point →+ Additive (ClassGroup W.CoordinateRing)` — the injective embedding `E ↪ Pic` on which Mathlib *builds* the group law — via `toClass_eq_zero` + `map_nsmul`. This is the first genuine rung of the Weil pairing construction: principality of `n·([P] − [O])` is the existence precondition for the Miller function `f_P`. Key finding: the divisor-class substrate (`toClass`, `FunctionField`, `rootsOfUnity`) is already in Mathlib, so the pairing is more reachable than "from zero" — remaining rungs (extract `f_P`, evaluate at divisors, Weil reciprocity, bilinear `eₙ→μₙ`) are the open frontier, `notes/FOUNDATIONS.md`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Point.toClass`, `toClass_eq_zero`, `map_nsmul`, `ClassGroup`)
Weil-pairing foundations, rung 2 — the Miller function exists (secp256k1_miller_function_exists: for a nonzero n-torsion point P=(x,y) of secp256k1, there exists f_P in th…
Ecdlp.Weil.secp256k1_miller_function_exists
Full ledger claim and scope
Weil-pairing foundations, rung 2 — the Miller function exists (`secp256k1_miller_function_exists`: for a nonzero `n`-torsion point `P=(x,y)` of secp256k1, there exists `f_P` in the function field `F(secp256k1)` generating the principal fractional ideal `(⟨X−x, Y−y⟩)ⁿ = (XYIdeal' h)ⁿ` — the Miller function, whose divisor is `n·([P] − [O])`. Extracted from rung 1: `n`-torsion trivializes the class `ClassGroup.mk ((XYIdeal' h)ⁿ) = (mk (XYIdeal' h))ⁿ = 1`, and Mathlib's `ClassGroup.mk_eq_one_iff` turns a trivial class into a principal ideal, whose generator is `f_P`. Rung W2 of the Weil sub-ladder — the input to Weil reciprocity / the pairing `eₙ`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`ClassGroup.mk_eq_one_iff`, `Submodule.IsPrincipal`, `Additive.toMul_nsmul`)
Weil-pairing foundations, rung 3 — the Miller function is unique up to a unit (secp256k1_miller_function_unique: two generators f, g of the same principal ideal (XYIdeal' h)ⁿ…
Ecdlp.Weil.secp256k1_miller_function_unique
Full ledger claim and scope
Weil-pairing foundations, rung 3 — the Miller function is unique up to a unit (`secp256k1_miller_function_unique`: two generators `f, g` of the same principal ideal `(XYIdeal' h)ⁿ` differ by a unit of the coordinate ring, `∃ u : F[secp256k1]ˣ, u • f = g` — the well-definedness input for the Weil pairing `eₙ` (its value must not depend on the chosen Miller function). Representative-independence half of rung W3. Proof designed by an AI model and kernel-verified — a piloted "strong-model + Lean-kernel" loop: the model read the Mathlib source, identified `Submodule.span_singleton_eq_span_singleton`, and produced the proof, which the kernel accepted)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Submodule.span_singleton_eq_span_singleton`) — model-designed proof
Weil-pairing infrastructure — point-evaluation homomorphism (evalAt: for a rational point (x,y) on any Weierstrass curve over a field, evaluation of a regular function at P…
Ecdlp.Weil.evalAt, evalAt_surjective, evalAt_ker
Full ledger claim and scope
Weil-pairing infrastructure — point-evaluation homomorphism (`evalAt`: for a rational point `(x,y)` on any Weierstrass curve over a field, evaluation of a regular function at `P` as a ring hom `F[E] →+* F`, built from Mathlib's `quotientXYIdealEquiv` (`F[E]/⟨X−x,Y−y⟩ ≃ F`); `evalAt_surjective` (every value attained — `P` is `F`-rational) and `evalAt_ker` (kernel `= ⟨X−x, Y−y⟩`, the maximal ideal of `P` — the functions vanishing at `P`). The first rung of the function-evaluation layer Mathlib lacks (v4.31 has no rational-function evaluation API and `F[E]` is not known to be Dedekind there); regular-function evaluation now exists, the rational extension via localization is next. Unblocks the Weil pairing's `f_P(D_Q)` step)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`CoordinateRing.quotientXYIdealEquiv`, `RingHom.ker_equiv_comp`, `Ideal.mk_ker`)
ECDLP
Kernel + compiler
#
X³ + 7 is separable — exactly 3 distinct roots over 𝔽̄_p (secp256k1_cubic_separable + secp256k1_cubic_roots_card_bar = 3 / _nodup_bar: the 2-torsion cubic X³+7 (whose r…
Ecdlp.Curve.secp256k1_cubic_separable, secp256k1_cubic_isCoprime_derivative, secp256k1_cubic_roots_card_bar, secp256k1_cubic_roots_nodup_bar
Full ledger claim and scope
X³ + 7` is separable — exactly 3 distinct roots over `𝔽̄_p` (`secp256k1_cubic_separable` + `secp256k1_cubic_roots_card_bar` = 3 / `_nodup_bar`: the 2-torsion cubic `X³+7` (whose roots are the `x`-coordinates of the 2-torsion, `Ψ₂Sq = 4(X³+7)`) is coprime to its derivative `3X²` by a trivial Bézout certificate `u₀·(X³+7) + (v₀X)·(3X²) = 1` (`u₀ = 7⁻¹`, `v₀ = −21⁻¹`; `p ∤ 21`), so it is separable and splits with `natDegree = 3` distinct roots over the closure — the `n = 2` analogue of the `secp256k1_Ψ₃_separable` family, the counting brick of E[2]. Constants cert-verified `scripts/certs/cubic_separable_cert.py` (`CERT_OK`))
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Separable`, `Separable.map`, `IsAlgClosed.splits`, `nodup_roots`) + Bézout native_decide
ECDLP
Kernel + compiler
#
X³ = 1 has exactly 3 roots in 𝔽_p (GLV cube-root count)
Ecdlp.Curve.secp256k1_three_cube_roots_of_unity
Full ledger claim and scope
X³ = 1` has exactly 3 roots in `𝔽_p` (GLV cube-root count)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
[n]-numerator strictly dominates its denominator (deg ΨSqₙ = n²−1 < n² = deg Φₙ; so the rational map x∘[n]=Φₙ/ψₙ² attains degree n² at the numerator — the differential-free…
Ecdlp.Curve.secp256k1_ΨSq_natDegree_lt_Φ
Full ledger claim and scope
[n]`-numerator strictly dominates its denominator (`deg ΨSqₙ = n²−1 < n² = deg Φₙ`; so the rational map `x∘[n]=Φₙ/ψₙ²` attains degree `n²` at the numerator — the differential-free Route-B crux for `deg[n]=n²`, modulo coprimality; see `notes/SEPARABILITY_ROUTES.md`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`natDegree_Φ`,`natDegree_ΨSq`)
a ZMod n-module is killed by n (n • x = 0)
Ecdlp.Torsion.zmod_module_nsmul_eq_zero
Full ledger claim and scope
a `ZMod n`-module is killed by `n` (`n • x = 0`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
adaptor signature completeness (atomic swaps / Lightning PTLC)
Ecdlp.Schnorr.adaptor_complete
- Domain
- ecdlp-ledger
- Method
- Mathlib
anomalous ⟺ trace one (#E=p ⟺ a_p=1; Smart/SSSA scope) ³
Ecdlp.Curve.anomalous_iff_trace_one
Full ledger claim and scope
anomalous ⟺ trace one (`#E=p ⟺ a_p=1`; Smart/SSSA scope) ³
- Domain
- ecdlp-ledger
- Method
- Mathlib
baby-step giant-step decomposition (O(√n) upper bound)
Ecdlp.GenericGroup.bsgs_decomp
Full ledger claim and scope
baby-step giant-step decomposition (`O(√n)` upper bound)
- Domain
- ecdlp-ledger
- Method
- Mathlib
baby/giant step count n ≤ ⌈√n⌉² (Θ(√n) closure)
Ecdlp.GenericGroup.bsgs_steps_sq_ge
Full ledger claim and scope
baby/giant step count `n ≤ ⌈√n⌉²` (`Θ(√n)` closure)
- Domain
- ecdlp-ledger
- Method
- Mathlib
batch Schnorr verification (per-signature challenges (∑sᵢ)G=∑Rᵢ+∑cᵢPᵢ)
Ecdlp.Schnorr.schnorr_batch_verify
Full ledger claim and scope
batch Schnorr verification (per-signature challenges `(∑sᵢ)G=∑Rᵢ+∑cᵢPᵢ`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
collision equation a+xb ≡ c+xd (mod n) (rho/BSGS solve step)
Ecdlp.GenericGroup.collision_modEq
Full ledger claim and scope
collision equation `a+xb ≡ c+xd (mod n)` (rho/BSGS solve step)
- Domain
- ecdlp-ledger
- Method
- Mathlib
collision equation, ZMod subtractive form (a−c)=x(d−b)
Ecdlp.GenericGroup.collision_zmod
Full ledger claim and scope
collision equation, `ZMod` subtractive form `(a−c)=x(d−b)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
deg preΨ₄ = 6 (4-torsion bound up the tower)
Ecdlp.Curve.secp256k1_preΨ₄_natDegree
Full ledger claim and scope
deg preΨ₄ = 6` (4-torsion bound up the tower)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
deg Ψ₂Sq = 3 (2-torsion count: #E[2] ≤ 4)
Ecdlp.Curve.secp256k1_Ψ₂Sq_natDegree
Full ledger claim and scope
deg Ψ₂Sq = 3` (2-torsion count: `#E[2] ≤ 4`)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
deg Ψ₃ = 4 (3-torsion count #E[3] ≤ 9; GLV-relevant CM torsion)
Ecdlp.Curve.secp256k1_Ψ₃_natDegree
Full ledger claim and scope
deg Ψ₃ = 4` (3-torsion count `#E[3] ≤ 9`; GLV-relevant CM torsion)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
deg(ψₙ)=(n²−1)/2 for all odd n coprime to p (uniform division-polynomial degree; generalizes the Ψ₃/ψ₅ per-level facts via Mathlib's natDegree_preΨ')
Ecdlp.Curve.secp256k1_odd_preΨ_natDegree
Full ledger claim and scope
deg(ψₙ)=(n²−1)/2` for all odd `n` coprime to `p` (uniform division-polynomial degree; generalizes the `Ψ₃`/`ψ₅` per-level facts via Mathlib's `natDegree_preΨ'`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
discrete log well-defined mod n (g^x=g^y ⇒ x≡y)
Ecdlp.GenericGroup.dlog_unique
Full ledger claim and scope
discrete log well-defined mod `n` (`g^x=g^y ⇒ x≡y`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
discrete-log recovery x=(a−c)(d−b)⁻¹ (collision solve, d−b a unit)
Ecdlp.GenericGroup.collision_recovers_log
Full ledger claim and scope
discrete-log recovery `x=(a−c)(d−b)⁻¹` (collision solve, `d−b` a unit)
- Domain
- ecdlp-ledger
- Method
- Mathlib
discriminant identity 1728·Δ = -c₆² (since c₄ = 0)
Ecdlp.Curve.secp256k1_c_relation
Full ledger claim and scope
discriminant identity `1728·Δ = -c₆²` (since `c₄ = 0`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
evalRatAt extends evalAt (evalRatAt_algebraMap: for (x,y) on any Weierstrass curve over a field and a regular function r ∈ F[E], the value of its image in the local ring…
Ecdlp.Weil.evalRatAt_algebraMap
Full ledger claim and scope
evalRatAt` extends `evalAt` (`evalRatAt_algebraMap`: for `(x,y)` on any Weierstrass curve over a field and a regular function `r ∈ F[E]`, the value of its image in the local ring `F[E]_P = Localization.AtPrime ⟨X−x,Y−y⟩` under `evalRatAt` equals its direct value `evalAt h r`. The correctness certificate that rational-function evaluation genuinely extends regular-function evaluation — the residue of the localization at `P` coincides *definitionally* with the quotient by `P`'s maximal ideal. Closes the evaluation layer before the Miller function `f_P` is evaluated; proof developed on the warm-server `lake env lean` loop)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`RingEquiv.symm_apply_eq`, `RingEquiv.ofBijective_apply`)
ECDLP
Kernel + compiler
#
fixed locus of the GLV automorphism φ(P)=P ⟺ x=0 (β·x=x ⇒ (β−1)x=0 ⇒ x=0 since β≠1; the ramification locus of E→E/⟨φ⟩, pins the order-3 automorphism's action together with…
Ecdlp.Curve.secp256k1_glvPoint_fixed_iff
Full ledger claim and scope
fixed locus of the GLV automorphism `φ(P)=P ⟺ x=0` (`β·x=x ⇒ (β−1)x=0 ⇒ x=0` since `β≠1`; the ramification locus of `E→E/⟨φ⟩`, pins the order-3 automorphism's action together with `glvHom≠id`)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
fixed-transcript affine collision core of the generic-group Ω(√p) bound (p ≤ q·q — a counting fact over a fixed set of affine forms; the adaptive-adversary/oracle wrapper that…
Ecdlp.GenericGroup.generic_dlog_query_bound
Full ledger claim and scope
fixed-transcript affine collision core of the generic-group `Ω(√p)` bound (`p ≤ q·q` — a counting fact over a fixed set of affine forms; the adaptive-adversary/oracle wrapper that upgrades it to the full Shoup/Nechaev lower bound is not formalized, per the file docstring)
- Domain
- ecdlp-ledger
- Method
- Mathlib
generic-group lower bound, square-root form √p ≤ q
Ecdlp.GenericGroup.generic_dlog_sqrt_bound
Full ledger claim and scope
generic-group lower bound, square-root form `√p ≤ q
- Domain
- ecdlp-ledger
- Method
- Mathlib
generic-group: distinct affine forms collide ≤ once
Ecdlp.GenericGroup.collisionSet_card_le_one
- Domain
- ecdlp-ledger
- Method
- Mathlib
generic-group: ≤ q·q−q colliding logs (union bound)
Ecdlp.GenericGroup.badSet_card_le
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
glv-subgroup-eigenvalue-006
Secp256k1.glv_lambda_eigenvalue
- Domain
- ecdlp-ledger
- Method
- native_decide
glv-subgroup-eigenvalue-006 (ZMod form)
Ecdlp.Targets.glv_eigenvalue_zmod
- Domain
- ecdlp-ledger
- Method
- Mathlib
model soundness: eval is additive on forms (group mult ↔ form add)
Ecdlp.GenericGroup.eval_add
Full ledger claim and scope
model soundness: `eval` is additive on forms (group mult ↔ form add)
- Domain
- ecdlp-ledger
- Method
- Mathlib
model soundness: eval respects negation (group inverse ↔ form neg)
Ecdlp.GenericGroup.eval_neg
Full ledger claim and scope
model soundness: `eval` respects negation (group inverse ↔ form neg)
- Domain
- ecdlp-ledger
- Method
- Mathlib
model soundness: identity is the zero form
Ecdlp.GenericGroup.eval_zero
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
n = 3 division polynomials Φ₃/ΨSq₃ for secp256k1 — canonical + explicit forms (secp256k1_Φ₃: Φ 3 = X·Ψ₃² − preΨ₄·Ψ₂Sq; secp256k1_ΨSq₃: ΨSq 3 = Ψ₃² — Mathlib's canonic…
Ecdlp.Curve.secp256k1_Φ₃, secp256k1_ΨSq₃, secp256k1_Φ₃_eval, secp256k1_ΨSq₃_eval
Full ledger claim and scope
n = 3` division polynomials `Φ₃`/`ΨSq₃` for secp256k1 — canonical + explicit forms (`secp256k1_Φ₃`: `Φ 3 = X·Ψ₃² − preΨ₄·Ψ₂Sq`; `secp256k1_ΨSq₃`: `ΨSq 3 = Ψ₃²` — Mathlib's canonical `Φ_three`/`ΨSq_three` specialised to secp256k1. Substituting the concrete `Ψ₃ = 3X⁴+84X`, `preΨ₄ = 2X⁶+280X³−784`, `Ψ₂Sq = 4X³+28` gives the explicit degree-9 numerator `Φ₃(x) = x⁹−672x⁶+2352x³+21952` (`secp256k1_Φ₃_eval`) and degree-8 denominator `ΨSq₃(x) = 9x⁸+504x⁵+7056x²` (`secp256k1_ΨSq₃_eval`) of `x(3•P) = Φ₃/ΨSq₃`. Groundwork for node N7@3 and the degree half of N10(i) (`deg [n] = n²`): the numerator degree `9 = 3²` is the general `deg [n] = n²` prediction at `n = 3`. Ring identities in `𝔽_p[X]`, no `native_decide`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Φ_three`, `ΨSq_three`) + repo eval bricks
n ∣ #E(𝔽_p) for P-256 — base-point order divides the curve cardinality (p256_n_dvd_card_point: P256.n ∣ Nat.card P256.toAffine.Point, by Lagrange on ⟨G⟩ (order the proved …
Ecdlp.P256.p256_n_dvd_card_point (+ p256_grp_card)
Full ledger claim and scope
n ∣ #E(𝔽_p)` for P-256 — base-point order divides the curve cardinality (`p256_n_dvd_card_point`: `P256.n ∣ Nat.card P256.toAffine.Point`, by Lagrange on `⟨G⟩` (order the proved `n`) + finiteness. The first verified fact about P-256's `#E` itself — all prior P-256 point-counting stayed inside `⟨G⟩`. Weak keystone: pins `#E ∈ {n, 2n, 3n, …}`. The strong keystone `#E = n` is NOT proved for P-256: the secp256k1 `j=0` / `−7`-non-cube 2-torsion route is `j=0`-specific and does not transfer (P-256 has `c₄=144≠0`, `j≠0`), and the general Hasse bound is a Mathlib gap. Pure-kernel)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`AddSubgroup.card_mul_index`, `Nat.card_zmultiples`) + `p256_generator_addOrderOf
ECDLP
Kernel + compiler
#
n ∣ #E(𝔽_p) — base-point order divides the curve cardinality (secp256k1_n_dvd_card_point: Secp256k1.n ∣ Nat.card secp256k1.toAffine.Point, by Lagrange on ⟨G⟩ (order the pro…
Ecdlp.Curve.secp256k1_n_dvd_card_point
Full ledger claim and scope
n ∣ #E(𝔽_p)` — base-point order divides the curve cardinality (`secp256k1_n_dvd_card_point`: `Secp256k1.n ∣ Nat.card secp256k1.toAffine.Point`, by Lagrange on `⟨G⟩` (order the proved `n`) + finiteness. The first verified fact about `#E` itself — all prior point-counting stayed inside `⟨G⟩`. Pins `#E ∈ {n, 2n, 3n, …}`; the strong keystone `#E = n` is now proved on top, curve-specifically without Hasse/Schoof (`CurveCardinalityExact.lean`). Compiler-trusted: inherits `Lean.ofReduceBool` from the order keystone `secp256k1_generator_addOrderOf` via `secp256k1_grp_card` — the Lagrange/finiteness step itself adds no `native_decide`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`AddSubgroup.card_mul_index`) + `secp256k1_grp_card
odd torsion ∩ 2-torsion = {O} (odd n: a point killed by both n and 2 is O, since addOrderOf P ∣ gcd(n,2)=1; node N12 of the ψₙ↔E[n] bridge decomposition — a reachable…
Ecdlp.Curve.secp256k1_odd_two_torsion_disjoint
Full ledger claim and scope
odd torsion ∩ 2-torsion = {O} (odd `n`: a point killed by both `n` and `2` is `O`, since `addOrderOf P ∣ gcd(n,2)=1`; node N12 of the `ψₙ↔E[n]` bridge decomposition — a reachable leaf toward the deep torsion correspondence, see `notes/DIVISION_POLY_TORSION_MAP.md`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
point-level 2-torsion criterion 2•P=0 ⟺ y=0 (both-directions ψ₂↔E[2] bridge at the point level — the criterion Mathlib records only as a TODO; upgrades the forward-only Ψ₂Sq…
Ecdlp.Curve.secp256k1_two_nsmul_eq_zero_iff
Full ledger claim and scope
point-level 2-torsion criterion `2•P=0 ⟺ y=0` (both-directions `ψ₂↔E[2]` bridge at the point level — the criterion Mathlib records only as a TODO; upgrades the forward-only `Ψ₂Sq`-root fact)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
point-level trace-zero identity P+λP+λ²P=0 (pointwise reading of glvHom_minpoly: X²+X+1 applied to any P returns O; the three points of a ⟨λ⟩-orbit sum to zero)
Ecdlp.Curve.secp256k1_glvPoint_orbit_sum
Full ledger claim and scope
point-level trace-zero identity `P+λP+λ²P=0` (pointwise reading of `glvHom_minpoly`: `X²+X+1` applied to any `P` returns `O`; the three points of a `⟨λ⟩`-orbit sum to zero)
- Domain
- ecdlp-ledger
- Method
- Mathlib
pollard-multistage-004 (Lagrange foundation)
order_dvd_card
- Domain
- ecdlp-ledger
- Method
- Mathlib
preΨ' 11 has ≤ 60 roots in 𝔽_p (degree-60 polynomial ⇒ ≤ 60 roots with multiplicity; instance of the uniform odd root bound at n=11; polynomial layer only — the root ↔ 11-tor…
Ecdlp.Curve.secp256k1_preΨ₁₁_roots_card_le
Full ledger claim and scope
preΨ' 11` has ≤ 60 roots in `𝔽_p` (degree-60 polynomial ⇒ ≤ 60 roots with multiplicity; instance of the uniform odd root bound at `n=11`; polynomial layer only — the root ↔ 11-torsion correspondence is *not* formalized (unlike `ℓ∈{2,3,5,7}`), so this carries no `#E[11]` statement; classical expectation `E[11]≅(ℤ/11)²` is unproved motivation)
- Domain
- ecdlp-ledger
- Method
- Mathlib
preΨ' 13 has ≤ 84 roots in 𝔽_p (degree-84 polynomial ⇒ ≤ 84 roots with multiplicity; instance of the uniform odd root bound at n=13; polynomial layer only — the root ↔ 13-tor…
Ecdlp.Curve.secp256k1_preΨ₁₃_roots_card_le
Full ledger claim and scope
preΨ' 13` has ≤ 84 roots in `𝔽_p` (degree-84 polynomial ⇒ ≤ 84 roots with multiplicity; instance of the uniform odd root bound at `n=13`; polynomial layer only — the root ↔ 13-torsion correspondence is *not* formalized (unlike `ℓ∈{2,3,5,7}`), so this carries no `#E[13]` statement; classical expectation `E[13]≅(ℤ/13)²` is unproved motivation)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
preΨ' 5 and preΨ' 7 are coprime — E[5] ⊥ E[7] (IsCoprime (secp256k1.preΨ' 5) (secp256k1.preΨ' 7) — "no point is both 5- and 7-torsion" (a shared x-coordinate would force…
Ecdlp.Curve.secp256k1_isCoprime_preΨ₅_preΨ₇
Full ledger claim and scope
preΨ' 5` and `preΨ' 7` are coprime — `E[5] ⊥ E[7]` (`IsCoprime (secp256k1.preΨ' 5) (secp256k1.preΨ' 7)` — "no point is both 5- and 7-torsion" (a shared `x`-coordinate would force `Q = ±P`, i.e. `5 = 7`); CAS extended-Euclid Bézout certificate over `𝔽_p` (`scripts/certs/torsion_disjoint_5_7.py`; `Res(ψ₅,ψ₇) = 2¹⁹²·3¹⁴⁴·7⁹⁶`, prime support `{2,3,7}` = the curve's bad-reduction primes), both polynomials on exponents `≡ 0 (mod 3)` so the product collapses to twelve residue equations against the degree-24 `preΨ' 7` — the twelve-power sibling of `CoprimePsi3Psi7`; completes pairwise `{2,3,5,7}`-torsion `x`-locus disjointness. Reuses `secp256k1_preΨ₅`/`secp256k1_preΨ₇`)
- Domain
- ecdlp-ledger
- Method
- Bézout certificate + native_decide
preΨ₄ = 2X⁶ + 280X³ − 784 (secp256k1 4-division polynomial auxiliary)
Ecdlp.Curve.secp256k1_preΨ₄
Full ledger claim and scope
preΨ₄ = 2X⁶ + 280X³ − 784` (secp256k1 4-division polynomial auxiliary)
- Domain
- ecdlp-ledger
- Method
- Mathlib
preΨ₄ ≠ 0 (proper finite root set)
Ecdlp.Curve.secp256k1_preΨ₄_ne_zero
Full ledger claim and scope
preΨ₄ ≠ 0` (proper finite root set)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
preΨ₄ and preΨ' 5 are coprime — E[4] ⊥ E[5] (IsCoprime secp256k1.preΨ₄ (secp256k1.preΨ' 5) — no nonidentity point is both (primitive) 4- and 5-torsion (a shared x would f…
Ecdlp.Curve.secp256k1_isCoprime_preΨ₄_preΨ₅
Full ledger claim and scope
preΨ₄` and `preΨ' 5` are coprime — `E[4] ⊥ E[5]` (`IsCoprime secp256k1.preΨ₄ (secp256k1.preΨ' 5)` — no nonidentity point is both (primitive) 4- and 5-torsion (a shared `x` would force `Q = ±P`, i.e. `4 = 5`); CAS extended-Euclid Bézout certificate over `𝔽_p` (`Res(preΨ₄,ψ₅) = 2⁴⁸·3³⁶·7²⁴`, prime support `{2,3,7}` = the curve's bad-reduction primes), both on exponents `≡ 0 (mod 3)`, six collapsed residue equations; extends the `preΨ₄ ⊥ {2,3}` pairs toward the `{2,3,4,5,7}`-torsion disjointness matrix)
- Domain
- ecdlp-ledger
- Method
- Bézout certificate + native_decide
ECDLP
Kernel + compiler
#
preΨ₄ and preΨ' 7 are coprime — E[4] ⊥ E[7] (IsCoprime secp256k1.preΨ₄ (secp256k1.preΨ' 7) — no nonidentity point is both (primitive) 4- and 7-torsion; CAS extended-Euclid…
Ecdlp.Curve.secp256k1_isCoprime_preΨ₄_preΨ₇
Full ledger claim and scope
preΨ₄` and `preΨ' 7` are coprime — `E[4] ⊥ E[7]` (`IsCoprime secp256k1.preΨ₄ (secp256k1.preΨ' 7)` — no nonidentity point is both (primitive) 4- and 7-torsion; CAS extended-Euclid Bézout certificate over `𝔽_p` (`Res(preΨ₄,ψ₇) = 2⁹⁶·3⁷²·7⁴⁸`, prime support `{2,3,7}`), both on exponents `≡ 0 (mod 3)`, ten collapsed residue equations; with `CoprimePsi4Psi5` completes `preΨ₄ ⊥ {2,3,5,7}` — full mutual disjointness of the `{2,3,4,5,7}`-torsion `x`-loci)
- Domain
- ecdlp-ledger
- Method
- Bézout certificate + native_decide
prime-order ⇒ generator (no small subgroup)
Ecdlp.Proved.orderOf_eq_card_of_prime
- Domain
- ecdlp-ledger
- Method
- Mathlib
quantitative Shoup bound: success count ≤ q·q−q+1
Ecdlp.GenericGroup.generic_success_le
- Domain
- ecdlp-ledger
- Method
- Mathlib
r-general elliptic-sequence identity ⇐ its r=1 case (isEllSequence_of_rec_one: any W:ℤ→R over a CommRing satisfying the two-index recurrence is an IsEllSequence; pure …
Ecdlp.EDS.isEllSequence_of_rec_one
Full ledger claim and scope
r`-general elliptic-sequence identity ⇐ its `r=1` case (`isEllSequence_of_rec_one`: any `W:ℤ→R` over a `CommRing` satisfying the two-index recurrence is an `IsEllSequence`; pure `linear_combination`, no `W 1=1` needed — more general than the roadmap expected. Isolates all remaining content of the open Mathlib TODO "`normEDS` is elliptic" into the `r=1` master recurrence; first upstream-Mathlib stepping stone toward it, see `notes/B1_TRACTABILITY_MAP.md`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`IsEllSequence`) + `linear_combination
ECDLP
Kernel + compiler
#
sec2-secp256k1-field-005
Secp256k1.p_special_form
- Domain
- ecdlp-ledger
- Method
- native_decide
sec2-secp256k1-group-006 / sec2-domain-parameters-001 (cofactor)
Ecdlp.Proved.cofactor_card_mul_index
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
secp256k1 11-division polynomial has degree 60 (deg(preΨ' 11)=(11²−1)/2=60; instantiates Mathlib's general natDegree_preΨ' at n=11 — an instance of secp256k1_odd_preΨ_natDe…
Ecdlp.Curve.secp256k1_preΨ₁₁_natDegree
Full ledger claim and scope
secp256k1 11-division polynomial has degree 60 (`deg(preΨ' 11)=(11²−1)/2=60`; instantiates Mathlib's general `natDegree_preΨ'` at `n=11` — an instance of `secp256k1_odd_preΨ_natDegree`; closes the `eleven_torsion_degree` prover-loop target; polynomial layer only: no `ℓ=11` torsion bridge is formalized, so no `E[11]` claim)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
secp256k1 13-division polynomial has degree 84 (deg(preΨ' 13)=(13²−1)/2=84; instantiates Mathlib's general natDegree_preΨ' at n=13 — an instance of secp256k1_odd_preΨ_natDe…
Ecdlp.Curve.secp256k1_preΨ₁₃_natDegree
Full ledger claim and scope
secp256k1 13-division polynomial has degree 84 (`deg(preΨ' 13)=(13²−1)/2=84`; instantiates Mathlib's general `natDegree_preΨ'` at `n=13` — an instance of `secp256k1_odd_preΨ_natDegree`; closes the `thirteen_torsion_degree` prover-loop target; polynomial layer only: no `ℓ=13` torsion bridge is formalized, so no `E[13]` claim)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
secp256k1 2-division polynomial Ψ₂Sq = 4X³+28 (Mathlib torsion bridge; 2-torsion x-coords)
Ecdlp.Curve.secp256k1_Ψ₂Sq
Full ledger claim and scope
secp256k1 2-division polynomial `Ψ₂Sq = 4X³+28` (Mathlib torsion bridge; 2-torsion `x`-coords)
- Domain
- ecdlp-ledger
- Method
- Mathlib
secp256k1 3-division polynomial Ψ₃ = 3X⁴+84X (3-torsion E[3]; the CM-by-ℤ[ζ₃] / GLV structure)
Ecdlp.Curve.secp256k1_Ψ₃
Full ledger claim and scope
secp256k1 3-division polynomial `Ψ₃ = 3X⁴+84X` (3-torsion `E[3]`; the CM-by-ℤ[ζ₃] / GLV structure)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
secp256k1 5-division polynomial has degree 12 (deg(ψ₅=preΨ' 5)=(5²−1)/2=12; instantiates Mathlib's general natDegree_preΨ' at n=5)
Ecdlp.Curve.secp256k1_preΨ₅_natDegree
Full ledger claim and scope
secp256k1 5-division polynomial has degree 12 (`deg(ψ₅=preΨ' 5)=(5²−1)/2=12`; instantiates Mathlib's general `natDegree_preΨ'` at `n=5`)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
secp256k1 7-division polynomial has degree 24 (deg(ψ₇=preΨ' 7)=(7²−1)/2=24; instantiates Mathlib's general natDegree_preΨ' at n=7)
Ecdlp.Curve.secp256k1_preΨ₇_natDegree
Full ledger claim and scope
secp256k1 7-division polynomial has degree 24 (`deg(ψ₇=preΨ' 7)=(7²−1)/2=24`; instantiates Mathlib's general `natDegree_preΨ'` at `n=7`)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
secp256k1 BSGS upper bound ⌈√n⌉ ≤ 2^128+1 (tight √n security)
Ecdlp.GenericGroup.secp256k1_bsgs_steps_le
Full ledger claim and scope
secp256k1 BSGS upper bound `⌈√n⌉ ≤ 2^128+1` (tight `√n` security)
- Domain
- ecdlp-ledger
- Method
- native_decide
ECDLP
Kernel + compiler
#
secp256k1 CM Frobenius certificate (N(π)=a²−ab+b²=p secp256k1_frobenius_norm, Tr(π)=2a−b=p+1−n secp256k1_frobenius_trace, 4p=t²+3b² secp256k1_four_p_eq_trace_sq — the…
Ecdlp.Curve.secp256k1_frobenius_norm, secp256k1_frobenius_trace, secp256k1_four_p_eq_trace_sq
Full ledger claim and scope
secp256k1 CM Frobenius certificate (`N(π)=a²−ab+b²=p` `secp256k1_frobenius_norm`, `Tr(π)=2a−b=p+1−n` `secp256k1_frobenius_trace`, `4p=t²+3b²` `secp256k1_four_p_eq_trace_sq` — the integer CM data for `π=a+bω`; with `t²<4p` this pins `End(E)⊗ℚ=ℚ(√−3)`, the order `ℤ[ω]` of discriminant −3 (corrects mistaken CM composites). Arithmetic certificate, not a Frobenius-as-endomorphism proof — that CM theory is a Mathlib gap)
- Domain
- ecdlp-ledger
- Method
- native_decide
ECDLP
Kernel + compiler
#
secp256k1 GLV endomorphism acts as [λ] at the generator (glvPoint G = λ·G, unconditional)
Ecdlp.Curve.secp256k1_glvPoint_generator
Full ledger claim and scope
secp256k1 GLV endomorphism acts as `[λ]` at the generator (`glvPoint G = λ·G`, unconditional)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
secp256k1 GLV endomorphism acts as [λ] on all of ⟨G⟩ (glvPoint P = λ·P ∀ P ∈ zmultiples G — unconditional, no point-counting)
Ecdlp.Curve.secp256k1_glvPoint_eq_lam_on_zmultiples
Full ledger claim and scope
secp256k1 GLV endomorphism acts as `[λ]` on all of `⟨G⟩` (`glvPoint P = λ·P` ∀ P ∈ zmultiples G — unconditional, no point-counting)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
secp256k1 3 ∣ (n−1) (GLV eigenvalue λ in ℤ/n)
Ecdlp.Curve.three_dvd_n_sub_one
Full ledger claim and scope
secp256k1 `3 ∣ (n−1)` (GLV eigenvalue `λ` in `ℤ/n`)
- Domain
- ecdlp-ledger
- Method
- native_decide
ECDLP
Kernel + compiler
#
secp256k1 3 ∣ (p−1) (cube root β in 𝔽_p)
Ecdlp.Curve.three_dvd_p_sub_one
Full ledger claim and scope
secp256k1 `3 ∣ (p−1)` (cube root `β` in `𝔽_p`)
- Domain
- ecdlp-ledger
- Method
- native_decide
secp256k1 E[n] = ker[n] (torsion = kernel of [n] on the curve group)
Ecdlp.Curve.secp256k1_torsionBy_eq_ker_nsmul
Full ledger claim and scope
secp256k1 `E[n] = ker[n]` (torsion = kernel of `[n]` on the curve group)
- Domain
- ecdlp-ledger
- Method
- Mathlib
secp256k1 E[n] = points of order dividing n (curve-named)
Ecdlp.Curve.secp256k1_mem_torsionBy_iff_addOrderOf_dvd
Full ledger claim and scope
secp256k1 `E[n]` = points of order dividing `n` (curve-named)
- Domain
- ecdlp-ledger
- Method
- Mathlib
secp256k1 b₂ = 0 (Weierstrass invariant)
Ecdlp.Curve.secp256k1_b₂
Full ledger claim and scope
secp256k1 `b₂ = 0` (Weierstrass invariant)
- Domain
- ecdlp-ledger
- Method
- Mathlib
secp256k1 b₄ = 0 (Weierstrass invariant)
Ecdlp.Curve.secp256k1_b₄
Full ledger claim and scope
secp256k1 `b₄ = 0` (Weierstrass invariant)
- Domain
- ecdlp-ledger
- Method
- Mathlib
secp256k1 b₆ = 28 (Weierstrass invariant)
Ecdlp.Curve.secp256k1_b₆
Full ledger claim and scope
secp256k1 `b₆ = 28` (Weierstrass invariant)
- Domain
- ecdlp-ledger
- Method
- Mathlib
secp256k1 b₈ = 0 (Weierstrass invariant)
Ecdlp.Curve.secp256k1_b₈
Full ledger claim and scope
secp256k1 `b₈ = 0` (Weierstrass invariant)
- Domain
- ecdlp-ledger
- Method
- Mathlib
secp256k1 c₆ = -6048 (Weierstrass c₆ invariant)
Ecdlp.Curve.secp256k1_c₆
Full ledger claim and scope
secp256k1 `c₆ = -6048` (Weierstrass `c₆` invariant)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
secp256k1 c₆ ≠ 0 (-6048 ≢ 0 mod p)
Ecdlp.Curve.secp256k1_c₆_ne_zero
Full ledger claim and scope
secp256k1 `c₆ ≠ 0` (`-6048 ≢ 0 mod p`)
- Domain
- ecdlp-ledger
- Method
- native_decide
ECDLP
Kernel + compiler
#
secp256k1 p ≡ 3 (mod 4) (point decompression)
Ecdlp.Curve.p_mod_four
Full ledger claim and scope
secp256k1 `p ≡ 3 (mod 4)` (point decompression)
- Domain
- ecdlp-ledger
- Method
- native_decide
ECDLP
Kernel + compiler
#
secp256k1 p−1 smooth-divisor ceiling — a target-property screen fact (secp256k1_p_sub_one_factorization: the complete prime factorization p−1 = 2·3·7·13441·C with C the 23…
Ecdlp.Curve.secp256k1_p_sub_one_factorization, secp256k1_smooth_divisor_dvd_smooth_part, secp256k1_smooth_divisor_le, pMinusOneCofactor_prime, pMinusOneCofactor_no_small_prime_factor
Full ledger claim and scope
secp256k1 `p−1` smooth-divisor ceiling — a target-property screen fact (`secp256k1_p_sub_one_factorization`: the complete prime factorization `p−1 = 2·3·7·13441·C` with `C` the 237-bit prime cofactor, reusing the Pratt node already established for `p`; `secp256k1_smooth_divisor_dvd_smooth_part`: every 13441-smooth divisor of `p−1` divides `564522 = 2·3·7·13441 ≈ 2^19.11`, since the remaining cofactor is prime and strictly larger, hence coprime to any such divisor; `secp256k1_smooth_divisor_le` gives the numeric ceiling `d ≤ 564522`. An exact arithmetic ceiling on the target, decidable in advance, used to screen published factor-base constructions that require `p−1` to carry a large smooth divisor — at zero experimental cost. Not an ECDLP statement, not a complexity bound, not a claim about any algorithm, and says nothing about the group order `n`, extension fields, or auxiliary curves. Inherits `Lean.ofReduceBool` from one closed `native_decide` identity)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide (reuses the `p` Pratt certificate)
ECDLP
Kernel + compiler
#
secp256k1 β has order 3 in 𝔽_p (GLV CM generator)
Ecdlp.Curve.secp256k1_beta_orderOf
Full ledger claim and scope
secp256k1 `β` has order 3 in `𝔽_p` (GLV CM generator)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
secp256k1 λ has order 3 in ℤ/n (GLV CM generator)
Ecdlp.Curve.secp256k1_lambda_orderOf
Full ledger claim and scope
secp256k1 `λ` has order 3 in `ℤ/n` (GLV CM generator)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
secp256k1 ⟨P⟩ ⊆ E[n] (finite-order point's subgroup is n-torsion)
Ecdlp.Curve.secp256k1_zmultiples_le_torsionBy
Full ledger claim and scope
secp256k1 `⟨P⟩ ⊆ E[n]` (finite-order point's subgroup is `n`-torsion)
- Domain
- ecdlp-ledger
- Method
- Mathlib
secp256k1 base point G ≠ O (SEC2 generator as a non-zero curve point)
Ecdlp.Curve.secp256k1_G_ne_zero
Full ledger claim and scope
secp256k1 base point `G ≠ O` (SEC2 generator as a non-zero curve point)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
secp256k1 base point G is on the curve (Gy² ≡ Gx³+7 mod p)
Secp256k1.generator_on_curve
Full ledger claim and scope
secp256k1 base point `G` is on the curve (`Gy² ≡ Gx³+7 mod p`)
- Domain
- ecdlp-ledger
- Method
- native_decide
ECDLP
Kernel + compiler
#
secp256k1 base point annihilated by n (n·G = 0, supporting addOrderOf)
Ecdlp.Curve.secp256k1_generator_nsmul_n_eq_zero
Full ledger claim and scope
secp256k1 base point annihilated by `n` (`n·G = 0`, supporting `addOrderOf`)
- Domain
- ecdlp-ledger
- Method
- native_decide
ECDLP
Kernel + compiler
#
secp256k1 base point has exact order n (weak point-counting keystone: ⟨G⟩ cyclic of order n, no Hasse/#E)
Ecdlp.Curve.secp256k1_generator_addOrderOf
Full ledger claim and scope
secp256k1 base point has exact order `n` (weak point-counting keystone: `⟨G⟩` cyclic of order `n`, no Hasse/`#E`)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
secp256k1 base point is non-identity (G ≠ 0, supporting addOrderOf)
Ecdlp.Curve.secp256k1_generator_ne_zero
Full ledger claim and scope
secp256k1 base point is non-identity (`G ≠ 0`, supporting `addOrderOf`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
secp256k1 classical attack-resistance profile — the substrate thesis, one unconditional theorem (secp256k1_classical_security_profile: a single kernel-verified conjunction certi…
Ecdlp.Curve.secp256k1_classical_security_profile
Full ledger claim and scope
secp256k1 classical attack-resistance profile — the substrate thesis, one unconditional theorem (`secp256k1_classical_security_profile`: a single kernel-verified conjunction certifying that *every known classically-expressible ECDLP shortcut is blocked* — `#E = n` (cofactor 1) ∧ `Nat.Prime n` (⇒ no Pohlig–Hellman reduction, no proper subgroup) ∧ `t ≠ 0` (not supersingular) ∧ `t ≠ 1` (not anomalous) ∧ `t² ≤ 4p` (Hasse) ∧ embedding degree `> 100` (no MOV/FR transfer). Honest scope: this is the *classical structural* envelope, not a hardness proof — the only proved hardness is the generic `Ω(√n)` bound (`secp256k1_generic_security`), and it is classical-only (Shor breaks ECDLP quantumly). The machine-checked statement of "every classical attack we can express is blocked", not "unbreakable". Assembles proved conjuncts; inherits `Lean.ofReduceBool` from them)
- Domain
- ecdlp-ledger
- Method
- Mathlib + `secp256k1_card_point_eq_n` + `secp256k1_n_prime` + `secp256k1_trace_ordinary_nonanomalous` + `secp256k1_embedding_degree_gt_100
ECDLP
Kernel + compiler
#
secp256k1 discriminant nonzero Δ ≠ 0 in 𝔽_p
Ecdlp.Curve.secp256k1_Δ_ne_zero
Full ledger claim and scope
secp256k1 discriminant nonzero `Δ ≠ 0` in `𝔽_p
- Domain
- ecdlp-ledger
- Method
- native_decide
ECDLP
Kernel + compiler
#
secp256k1 field prime p is prime (full Pratt certificate)
Ecdlp.Primality.secp256k1_p_prime
Full ledger claim and scope
secp256k1 field prime `p` is prime (full Pratt certificate)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
secp256k1 generator is a point of the Mathlib EllipticCurve
Ecdlp.Curve.secp256k1_generator_equation
Full ledger claim and scope
secp256k1 generator is a point of the Mathlib `EllipticCurve
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
secp256k1 generator is nonsingular (a group element)
Ecdlp.Curve.secp256k1_generator_nonsingular
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
ECDLP
Kernel + compiler
#
secp256k1 group order 2^255 < n
Ecdlp.GenericGroup.two_pow_255_lt_secp256k1_n
Full ledger claim and scope
secp256k1 group order `2^255 < n
- Domain
- ecdlp-ledger
- Method
- native_decide
ECDLP
Kernel + compiler
#
secp256k1 group order n is prime (full Pratt certificate)
Ecdlp.Primality.secp256k1_n_prime
Full ledger claim and scope
secp256k1 group order `n` is prime (full Pratt certificate)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
secp256k1 has exactly n−1 full-order private keys (secp256k1_scalar_num_generators: #{a : ZMod n \| addOrderOf a = n} = n−1 — every nonzero scalar generates, φ(n)=n−1; the…
Ecdlp.Curve.secp256k1_scalar_num_generators
Full ledger claim and scope
secp256k1 has exactly `n−1` full-order private keys (`secp256k1_scalar_num_generators`: `#{a : ZMod n \| addOrderOf a = n} = n−1` — every nonzero scalar generates, `φ(n)=n−1`; the quantitative generator/valid-key count)
- Domain
- ecdlp-ledger
- Method
- secp256k1_n_prime` + Mathlib (`IsAddCyclic.card_addOrderOf_eq_totient`, `ZMod.card`, `Nat.totient_prime`)
ECDLP
Kernel + compiler
#
secp256k1 has no small embedding degree (p^k ≢ 1 mod n for 1≤k≤100; MOV/FR resistance)
Ecdlp.Curve.secp256k1_embedding_degree_gt_100
Full ledger claim and scope
secp256k1 has no small embedding degree (`p^k ≢ 1 mod n` for `1≤k≤100`; MOV/FR resistance)
- Domain
- ecdlp-ledger
- Method
- native_decide
secp256k1 invariant c₄ = 0
Ecdlp.Curve.secp256k1_c₄_eq_zero
Full ledger claim and scope
secp256k1 invariant `c₄ = 0
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
secp256k1 is a Mathlib EllipticCurve (grounds the group law)
Ecdlp.Curve.secp256k1.IsElliptic (instance)
Full ledger claim and scope
secp256k1 is a Mathlib `EllipticCurve` (grounds the group law)
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
secp256k1 j-invariant j = 0 (CM by ℤ[ζ₃] ⇒ GLV λ)
Ecdlp.Curve.secp256k1_j_eq_zero
Full ledger claim and scope
secp256k1 j-invariant `j = 0` (CM by `ℤ[ζ₃]` ⇒ GLV `λ`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
secp256k1 quadratic-twist security certificate — a limitation, not a strength (secp256k1_twist_security_profile: the twist order #Ẽ = 2p+2−n factors exactly as 3²·13²·3319·22…
Ecdlp.Curve.secp256k1_twist_security_profile, secp256k1_twist_order_factorization, secp256k1_twist_maxprime_prime
Full ledger claim and scope
secp256k1 quadratic-twist security certificate — a limitation, not a strength (`secp256k1_twist_security_profile`: the twist order `#Ẽ = 2p+2−n` factors exactly as `3²·13²·3319·22639·Q` with `Q` a 220-bit prime (`secp256k1_twist_maxprime_prime`, full Pratt certificate; `secp256k1_twist_order_factorization`). Two honest consequences: (1) the cofactor `3²·13²·3319·22639 = 114286177161 ≈ 2³⁷ > 1` is nontrivial — unlike the simple point group of `E`, the twist has genuine small-order subgroups a point can be confined to; (2) `2²¹⁹ < Q < 2²²⁰`, so generic twist-DLP costs `≈ √Q < 2¹¹⁰`, below the curve's `≈2¹²⁸`. This is the machine-checked reason single-coordinate (`x`-only / Montgomery-ladder) secp256k1 code must validate points. Inherits `Lean.ofReduceBool` from `native_decide` + Pratt)
- Domain
- ecdlp-ledger
- Method
- native_decide + Pratt (`lucas_primality`)
ECDLP
Kernel + compiler
#
secp256k1 rational-point group is finite (instFiniteSecp256k1Point: Finite secp256k1.toAffine.Point, now a one-line inferInstance corollary of the general WeierstrassCurve.…
Ecdlp.Curve.instFiniteSecp256k1Point
Full ledger claim and scope
secp256k1 rational-point group is finite (`instFiniteSecp256k1Point`: `Finite secp256k1.toAffine.Point`, now a one-line `inferInstance` corollary of the general `WeierstrassCurve.Affine.instFinitePoint` since `ZMod Secp256k1.p` is a finite commutative ring. Makes Mathlib's `Nat.card E.toAffine.Point` (as used in `EllipticCurve/LFunction.lean`) a real quantity rather than junk `0`. Pure-kernel, no native_decide)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Finite.of_injective`) via `instFinitePoint
secp256k1 scalar group ℤ/n has no proper nontrivial subgroup (secp256k1_scalar_no_proper_subgroup: every H : AddSubgroup (ZMod n) is ⊥ or ⊤ — the full subgroup-lattice d…
Ecdlp.Curve.secp256k1_scalar_no_proper_subgroup
Full ledger claim and scope
secp256k1 scalar group `ℤ/n` has no proper nontrivial subgroup (`secp256k1_scalar_no_proper_subgroup`: every `H : AddSubgroup (ZMod n)` is `⊥` or `⊤` — the full subgroup-lattice dichotomy from `n` prime, strictly stronger than the element-level generator fact; small-subgroup / invalid-subgroup confinement-attack resistance)
- Domain
- ecdlp-ledger
- Method
- secp256k1_n_prime` + Mathlib (`AddSubgroup.eq_bot_or_eq_top_of_prime_card`, `Nat.card_zmod`)
secp256k1 torsion filtration (E[m] ≤ E[n] when m ∣ n, curve-named)
Ecdlp.Curve.secp256k1_torsionBy_dvd_le
Full ledger claim and scope
secp256k1 torsion filtration (`E[m] ≤ E[n]` when `m ∣ n`, curve-named)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
secp256k1 trace of Frobenius: ordinary, non-anomalous, Hasse (t≠0, t≠1, t²≤4p; Smart/SSSA + supersingular resistance)
Ecdlp.Curve.secp256k1_trace_ordinary_nonanomalous
Full ledger claim and scope
secp256k1 trace of Frobenius: ordinary, non-anomalous, Hasse (`t≠0`, `t≠1`, `t²≤4p`; Smart/SSSA + supersingular resistance)
- Domain
- ecdlp-ledger
- Method
- native_decide
ECDLP
Kernel + compiler
#
secp256k1 ≥ 128-bit generic security (2^127 < q) — *classical, generic (black-box) model only; not unconditional and false against quantum/Shor, see notes/SECURITY_SCOPE.md*
Ecdlp.GenericGroup.secp256k1_generic_security
Full ledger claim and scope
secp256k1 ≥ 128-bit generic security (`2^127 < q`) — *classical, generic (black-box) model only; not unconditional and false against quantum/Shor, see `notes/SECURITY_SCOPE.md`*
- Domain
- ecdlp-ledger
- Method
- Mathlib + native_decide
secp256k1's point group has no proper nontrivial subgroup — group-level cofactor-1 security (secp256k1_point_group_no_proper_subgroup: every AddSubgroup of E(𝔽_p) is ⊥ or…
Ecdlp.Curve.secp256k1_point_group_no_proper_subgroup, secp256k1_nonzero_point_generates
Full ledger claim and scope
secp256k1's point group has no proper nontrivial subgroup — group-level cofactor-1 security (`secp256k1_point_group_no_proper_subgroup`: every `AddSubgroup` of `E(𝔽_p)` is `⊥` or `⊤`, since `#E = n` is prime; plus `secp256k1_nonzero_point_generates`: every `P ≠ 0` has `zmultiples P = ⊤`, and an `IsSimpleAddGroup` instance). The point-group (curve) statement of small-subgroup / invalid-subgroup attack resistance — there is no small-order subgroup a point could be confined to. The geometric counterpart of the scalar-ring `secp256k1_scalar_no_proper_subgroup`, proved the same way with `secp256k1_card_point_eq_n` as the cardinality bridge. Pure-kernel on top of the keystone
- Domain
- ecdlp-ledger
- Method
- Mathlib (`AddSubgroup.eq_bot_or_eq_top_of_prime_card`, `isSimpleAddGroup_of_prime_card`) + `secp256k1_card_point_eq_n
ECDLP
Kernel + compiler
#
supporting: beta < p
Secp256k1.beta_lt_p
- Domain
- ecdlp-ledger
- Method
- native_decide
ECDLP
Kernel + compiler
#
supporting: beta^2+beta+1 = 0 mod p
Secp256k1.beta_field_eigenvalue
- Domain
- ecdlp-ledger
- Method
- native_decide
ECDLP
Kernel + compiler
#
supporting: beta^3 = 1 mod p
Secp256k1.beta_is_cube_root
- Domain
- ecdlp-ledger
- Method
- native_decide
ECDLP
Kernel + compiler
#
supporting: lam < n
Secp256k1.lam_lt_n
- Domain
- ecdlp-ledger
- Method
- native_decide
ECDLP
Kernel + compiler
#
supporting: lambda != 1
Secp256k1.lambda_ne_one
- Domain
- ecdlp-ledger
- Method
- native_decide
ECDLP
Kernel + compiler
#
supporting: lambda^3 = 1 mod n
Secp256k1.lambda_is_cube_root
- Domain
- ecdlp-ledger
- Method
- native_decide
the DL group is its own n-torsion (G[n] = ⊤; cofactor-1 shape)
Ecdlp.Torsion.torsionBy_eq_top
Full ledger claim and scope
the DL group is its own `n`-torsion (`G[n] = ⊤`; cofactor-1 shape)
- Domain
- ecdlp-ledger
- Method
- Mathlib
torsion filtration (E[m] ≤ E[n] when m ∣ n)
Ecdlp.Torsion.torsionBy_dvd_le
Full ledger claim and scope
torsion filtration (`E[m] ≤ E[n]` when `m ∣ n`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
vector Pedersen commitment homomorphism (Bulletproofs / confidential tx)
Ecdlp.Schnorr.pedersen_vector_homomorphic
- Domain
- ecdlp-ledger
- Method
- Mathlib
¬ IsCoprime(Φₙ, ΨSqₙ) ⇒ consecutive scalar-normEDS zeros over k̄ (global descent, N5 reduced to the scalar sequence) (composes the L1 field↔closure bridge exists_common_root…
Ecdlp.Curve.exists_normEDS_consecutive_eq_zero_of_not_isCoprime, exists_sq_eq_eval_Ψ₂Sq
Full ledger claim and scope
¬ IsCoprime(Φₙ, ΨSqₙ)` ⇒ consecutive scalar-`normEDS` zeros over `k̄` (global descent, N5 reduced to the scalar sequence) (composes the L1 field↔closure bridge `exists_common_root_of_not_isCoprime` with the local descent: a non-coprimality over a field `k` yields two consecutive `normEDS` zeros over any algebraically closed extension, with `β² = Ψ₂Sq(x₀)` supplied by `IsAlgClosed.exists_pow_nat_eq`. Turns the coprimality obligation `gcd(Φₙ,ΨSqₙ)=1` into a statement purely about the scalar EDS)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`WeierstrassCurve.map_Φ`/`map_ΨSq`) + L1 + local descent
Φ n is monic for secp256k1 (N4 monic half) (secp256k1.Φ n has leading coefficient 1, so its degree is genuine and Φ n ≠ 0 — Mathlib's leadingCoeff_Φ is unconditional)
Ecdlp.Curve.secp256k1_Φ_monic
Full ledger claim and scope
Φ n` is monic for secp256k1 (N4 monic half) (`secp256k1.Φ n` has leading coefficient `1`, so its degree is genuine and `Φ n ≠ 0` — Mathlib's `leadingCoeff_Φ` is unconditional)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`WeierstrassCurve.leadingCoeff_Φ`)
Ψ₂Sq ≠ 0 (2-torsion is a proper finite set)
Ecdlp.Curve.secp256k1_Ψ₂Sq_ne_zero
Full ledger claim and scope
Ψ₂Sq ≠ 0` (2-torsion is a proper finite set)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
Ψ₂Sq and preΨ' 5 are coprime — E[2] ⊥ E[5] (IsCoprime (4X³+28) (preΨ' 5) — "no point is both 2- and 5-torsion" (a common root would be a nonzero point of order dividing gc…
Ecdlp.Curve.secp256k1_isCoprime_Ψ₂Sq_preΨ₅
Full ledger claim and scope
Ψ₂Sq` and `preΨ' 5` are coprime — `E[2] ⊥ E[5]` (`IsCoprime (4X³+28) (preΨ' 5)` — "no point is both 2- and 5-torsion" (a common root would be a nonzero point of order dividing `gcd(2,5) = 1`); CAS Bézout certificate over `𝔽_p` (`scripts/certs/torsion_disjoint_2_5.py`), both polynomials on exponents `≡ 0 (mod 3)` so the product collapses to five residue equations — the five-power sibling of `CoprimePsi3Psi5`; reuses `secp256k1_preΨ₅`)
- Domain
- ecdlp-ledger
- Method
- Bézout certificate + native_decide
ECDLP
Kernel + compiler
#
Ψ₂Sq and preΨ' 7 are coprime over 𝔽_p[X] (secp256k1_isCoprime_Ψ₂Sq_preΨ₇: IsCoprime secp256k1.Ψ₂Sq (secp256k1.preΨ' 7) — a polynomial coprimality via an explicit CAS Bézo…
Ecdlp.Curve.secp256k1_isCoprime_Ψ₂Sq_preΨ₇
Full ledger claim and scope
Ψ₂Sq` and `preΨ' 7` are coprime over `𝔽_p[X]` (`secp256k1_isCoprime_Ψ₂Sq_preΨ₇`: `IsCoprime secp256k1.Ψ₂Sq (secp256k1.preΨ' 7)` — a polynomial coprimality via an explicit CAS Bézout certificate over `𝔽_p` (`scripts/certs/psi2_psi7_coprime_cert.py`), nine collapsed residue equations on the exponent-`≡0 mod 3` lattice against the degree-24 `preΨ' 7`; the nine-power sibling of `CoprimePsi2Psi5`, completing the `Ψ₂Sq ⊥ preΨₙ` family for the `y≠0`-on-torsion input to the ℓ=7 structure. The classical `gcd(2,7)=1` / `E[2] ⊥ E[7]` reading and its `𝔽̄_p` `y≠0`-at-roots consequence are motivation only — not part of the statement)
- Domain
- ecdlp-ledger
- Method
- Bézout certificate + native_decide
ECDLP
Kernel + compiler
#
Ψ₂Sq and preΨ₄ are coprime (IsCoprime (4X³+28) (2X⁶+280X³−784) — "no point is both 2- and *primitive* 4-torsion"; completes the pairwise low-torsion disjointness with L5/L6,…
Ecdlp.Curve.secp256k1_isCoprime_Ψ₂Sq_preΨ₄
Full ledger claim and scope
Ψ₂Sq` and `preΨ₄` are coprime (`IsCoprime (4X³+28) (2X⁶+280X³−784)` — "no point is both 2- and *primitive* 4-torsion"; completes the pairwise low-torsion disjointness with L5/L6, third manifestation of `Δ≠0`; node L6b of B1, CAS-computed Bézout certificate over `𝔽_p`)
- Domain
- ecdlp-ledger
- Method
- Bézout certificate + native_decide
ECDLP
Kernel + compiler
#
Ψ₂Sq and Ψ₃ are coprime (IsCoprime (4X³+28) (3X⁴+84X) — "no point is both 2- and 3-torsion", where Δ≠0 enters; node L5 of the B1 coprimality plan, proved by an explicit CAS…
Ecdlp.Curve.secp256k1_isCoprime_Ψ₂Sq_Ψ₃
Full ledger claim and scope
Ψ₂Sq` and `Ψ₃` are coprime (`IsCoprime (4X³+28) (3X⁴+84X)` — "no point is both 2- and 3-torsion", where `Δ≠0` enters; node L5 of the B1 coprimality plan, proved by an explicit CAS-computed Bézout certificate over `𝔽_p`; first hand-built sub-lemma toward `gcd(Φₙ,ψₙ²)=1`)
- Domain
- ecdlp-ledger
- Method
- Bézout certificate + native_decide
Ψ₃ ≠ 0 (3-torsion is a proper finite set)
Ecdlp.Curve.secp256k1_Ψ₃_ne_zero
Full ledger claim and scope
Ψ₃ ≠ 0` (3-torsion is a proper finite set)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ECDLP
Kernel + compiler
#
Ψ₃ and preΨ' 5 are coprime — E[3] ⊥ E[5] (IsCoprime (3X⁴+84X) (5X¹²+2660X⁹−11760X⁶−548800X³−614656) — "no point is both 3- and 5-torsion" (a shared x-coordinate would for…
Ecdlp.Curve.secp256k1_isCoprime_Ψ₃_preΨ₅, secp256k1_preΨ₅
Full ledger claim and scope
Ψ₃` and `preΨ' 5` are coprime — `E[3] ⊥ E[5]` (`IsCoprime (3X⁴+84X) (5X¹²+2660X⁹−11760X⁶−548800X³−614656)` — "no point is both 3- and 5-torsion" (a shared `x`-coordinate would force `Q = ±P`, i.e. `3 = 5`); CAS extended-Euclid Bézout certificate over `𝔽_p` (`scripts/certs/torsion_disjoint_3_5.py`), the mod-3 exponent structure collapsing the product to six residue equations; also records the first explicit 5-division form `secp256k1_preΨ₅` via Mathlib's `preΨ'_odd` at `m = 0`)
- Domain
- ecdlp-ledger
- Method
- Bézout certificate + native_decide
ECDLP
Kernel + compiler
#
Ψ₃ and preΨ' 7 are coprime — E[3] ⊥ E[7] (IsCoprime (3X⁴+84X) (preΨ' 7) — "no point is both 3- and 7-torsion"; CAS Bézout certificate over 𝔽_p (scripts/certs/torsion_dis…
Ecdlp.Curve.secp256k1_isCoprime_Ψ₃_preΨ₇, secp256k1_preΨ₇
Full ledger claim and scope
Ψ₃` and `preΨ' 7` are coprime — `E[3] ⊥ E[7]` (`IsCoprime (3X⁴+84X) (preΨ' 7)` — "no point is both 3- and 7-torsion"; CAS Bézout certificate over `𝔽_p` (`scripts/certs/torsion_disjoint_3_7.py`), ten collapsed residue equations against the degree-24 `preΨ' 7`; also records the first explicit 7-division form `secp256k1_preΨ₇` via `preΨ'_odd` at `m = 1`, collapsing to `preΨ'5·Ψ₃³ − preΨ₄³·Ψ₂Sq²`)
- Domain
- ecdlp-ledger
- Method
- Bézout certificate + native_decide
ECDLP
Kernel + compiler
#
Ψ₃ and preΨ₄ are coprime (IsCoprime (3X⁴+84X) (2X⁶+280X³−784) — "no point is both 3- and 4-torsion", the second place Δ≠0 enters; node L6 of B1, CAS-computed Bézout certifi…
Ecdlp.Curve.secp256k1_isCoprime_Ψ₃_preΨ₄
Full ledger claim and scope
Ψ₃` and `preΨ₄` are coprime (`IsCoprime (3X⁴+84X) (2X⁶+280X³−784)` — "no point is both 3- and 4-torsion", the second place `Δ≠0` enters; node L6 of B1, CAS-computed Bézout certificate over `𝔽_p`)
- Domain
- ecdlp-ledger
- Method
- Bézout certificate + native_decide
φ-fixed points are 3-torsion φP=P ⇒ 3•P=0 (composes the trace-zero identity with the fixed hypothesis: φP=P collapses P+φP+φ²P=O to 3P=O; the group-law form of ker(φ−1)⊆…
Ecdlp.Curve.secp256k1_glvPoint_fixed_three_torsion
Full ledger claim and scope
φ`-fixed points are 3-torsion `φP=P ⇒ 3•P=0` (composes the trace-zero identity with the fixed hypothesis: `φP=P` collapses `P+φP+φ²P=O` to `3P=O`; the group-law form of `ker(φ−1)⊆E[3]`, `N(ω−1)=3`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ψ 3 evaluated at a secp256k1 point = 3x⁴+84x (secp256k1_psi3_evalEval: the bivariate 3-division polynomial reduces to the concrete univariate on the curve; the bookkeeping ha…
Ecdlp.Curve.secp256k1_psi3_evalEval
Full ledger claim and scope
ψ 3` evaluated at a secp256k1 point = `3x⁴+84x` (`secp256k1_psi3_evalEval`: the bivariate 3-division polynomial reduces to the concrete univariate on the curve; the bookkeeping half of the n=3 torsion bridge)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`ψ_three`, `evalEval_C`) + `secp256k1_Ψ₃
ψ 5 at a secp256k1 point reduces to a concrete degree-12 univariate (secp256k1_psi5_evalEval: on the curve y²=x³+7, (ψ 5).evalEval x y = 5x¹²+2660x⁹−11760x⁶−548800x³−614656…
Ecdlp.Curve.secp256k1_psi5_evalEval
Full ledger claim and scope
ψ 5` at a secp256k1 point reduces to a concrete degree-12 univariate (`secp256k1_psi5_evalEval`: on the curve `y²=x³+7`, `(ψ 5).evalEval x y = 5x¹²+2660x⁹−11760x⁶−548800x³−614656` — a polynomial in `x³`, reflecting the `j=0`/CM structure; via the master `ψ_odd` recursion `ψ₅ = preΨ₄·ψ₂⁴ − Ψ₃³`, the bookkeeping half of the n=5 torsion bridge)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`ψ_odd`/`ψ_four`/`ψ_three`/`ψ_two`) + `linear_combination
ψ 7 at a secp256k1 point reduces to a concrete degree-24 univariate (secp256k1_psi7_evalEval: on the curve y²=x³+7, (ψ 7).evalEval x y = 7x²⁴+27608x²¹−2101904x¹⁸−284585728x¹…
Ecdlp.Curve.secp256k1_psi7_evalEval
Full ledger claim and scope
ψ 7` at a secp256k1 point reduces to a concrete degree-24 univariate (`secp256k1_psi7_evalEval`: on the curve `y²=x³+7`, `(ψ 7).evalEval x y = 7x²⁴+27608x²¹−2101904x¹⁸−284585728x¹⁵−2228742656x¹²−26142548992x⁹−330576748544x⁶−661153497088x³+377801998336`; via `ψ_odd 3` (`ψ₇ = ψ₅·ψ₃³ − ψ₂·ψ₄³`), the bookkeeping half of the n=7 torsion bridge)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`ψ_odd`) + `linear_combination
ψ₃ root ⟺ Miller divisor 3·([P]−[O]) principal (secp256k1_psi3_root_iff_class_torsion: for a nonzero affine P=(x,y) of secp256k1, (ψ 3).evalEval x y = 0 ↔ 3 • toClass P = 0…
Ecdlp.Weil.secp256k1_psi3_root_iff_class_torsion
Full ledger claim and scope
ψ₃ root ⟺ Miller divisor `3·([P]−[O])` principal (`secp256k1_psi3_root_iff_class_torsion`: for a nonzero affine `P=(x,y)` of secp256k1, `(ψ 3).evalEval x y = 0 ↔ 3 • toClass P = 0` — the 3-division polynomial vanishes at `P` iff the Abel–Jacobi class is 3-torsion, i.e. iff `3·([P]−[O])` is principal. Welds the division-polynomial torsion tower to Weil divisor-class rung 1 at their shared middle `3•P=0`; the first result letting a computable coordinate condition `ψ 3 = 0` *decide* the divisor-theoretic principality the Miller function needs)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Iff.trans`; composes `secp256k1_three_nsmul_eq_zero_iff` + `secp256k1_torsion_iff_principal`)
ψ₅ root ⟺ Miller divisor 5·([P]−[O]) principal (secp256k1_psi5_root_iff_class_torsion: the n=5 analogue — (ψ 5).evalEval x y = 0 ↔ 5 • toClass P = 0)
Ecdlp.Weil.secp256k1_psi5_root_iff_class_torsion
Full ledger claim and scope
ψ₅ root ⟺ Miller divisor `5·([P]−[O])` principal (`secp256k1_psi5_root_iff_class_torsion`: the `n=5` analogue — `(ψ 5).evalEval x y = 0 ↔ 5 • toClass P = 0`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Iff.trans`)
ψ₇ root ⟺ Miller divisor 7·([P]−[O]) principal (secp256k1_psi7_root_iff_class_torsion: the n=7 analogue — (ψ 7).evalEval x y = 0 ↔ 7 • toClass P = 0)
Ecdlp.Weil.secp256k1_psi7_root_iff_class_torsion
Full ledger claim and scope
ψ₇ root ⟺ Miller divisor `7·([P]−[O])` principal (`secp256k1_psi7_root_iff_class_torsion`: the `n=7` analogue — `(ψ 7).evalEval x y = 0 ↔ 7 • toClass P = 0`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`Iff.trans`)
ECDLP
Kernel + compiler
#
ω-free EDS engine — ψ elliptic-net relation + the x-coordinate difference identity (N7-uniform, curve-generic) (ψ_isEllSequence: ψ satisfies Mathlib's three-term net relatio…
Ecdlp.Curve.ψ_isEllSequence, ψ_succ_mul_ψ_pred, φ_ψ_diff
Full ledger claim and scope
ω-free EDS engine — `ψ` elliptic-net relation + the x-coordinate difference identity (N7-uniform, curve-generic) (`ψ_isEllSequence`: `ψ` satisfies Mathlib's three-term net relation `ψ(m+n)ψ(m−n)ψr² = ψ(m+r)ψ(m−r)ψn² − ψ(n+r)ψ(n−r)ψm²` — it is `normEDS ψ₂ (C Ψ₃)(C preΨ₄)` definitionally; `ψ_succ_mul_ψ_pred`: `ψ(n+1)ψ(n−1) = X·ψn² − φn`; and `φ_ψ_diff`: `φn·ψm² − φm·ψn² = ψ(m+n)ψ(m−n)` (Silverman, *Arithmetic of Elliptic Curves*, III Ex. 3.7) — the `r=1` net specialisation, the ω-free core of the multiplication-by-`n` x-coordinate difference `x(nP)−x(mP) = −ψ(m+n)ψ(m−n)/(ψn²ψm²)`. Arbitrary Weierstrass `W` over any `CommRing`, all `m,n : ℤ`. Honest scope: algebraic identities in `R[X][Y]`; the `Point`-level transport is a separate (open) rung. No `native_decide`, no new axioms)
- Domain
- ecdlp-ledger
- Method
- repo `normEDS_isEllSequence` + Mathlib `φ`/`ψ` defs
ECDLP
Kernel + compiler
#
√ in 𝔽_q for q≡3 (mod 4): (a^((q+1)/4))² = a (sqrt_of_three_mod_four: for a prime q≡3 (mod 4) and any square a ∈ ZMod q, the closed form a^((q+1)/4) squares back to…
Ecdlp.Curve.sqrt_of_three_mod_four
Full ledger claim and scope
√ in `𝔽_q` for `q≡3 (mod 4)`: `(a^((q+1)/4))² = a` (`sqrt_of_three_mod_four`: for a prime `q≡3 (mod 4)` and any square `a ∈ ZMod q`, the closed form `a^((q+1)/4)` squares back to `a` — proved via the Frobenius/Fermat identity `ZMod.pow_card` (`b^q = b`), so the `a=0` case is covered uniformly (no split). Specialized to `q=p` as `secp256k1_sqrt_of_isSquare` (the point-decompression identity); companion congruences `p_mod_twelve` (`p≡7 mod 12`) and `p_mod_three` (`p≡1 mod 3`). FBL-PURE-003; general theorem kernel-pure, congruences `native_decide`)
- Domain
- ecdlp-ledger
- Method
- Mathlib (`ZMod.pow_card`, `pow_two`/`pow_mul`/`pow_succ`) + `omega
≤ 12 five-torsion x-coordinates (#E[5]≤25; roots of the odd division polynomial ψ₅ are the order-5 x-coords, consistent with E[5]≅(ℤ/5)²)
Ecdlp.Curve.secp256k1_five_torsion_x_card_le
Full ledger claim and scope
≤ 12 five-torsion `x`-coordinates (`#E[5]≤25`; roots of the odd division polynomial `ψ₅` are the order-5 `x`-coords, consistent with `E[5]≅(ℤ/5)²`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
≤ 24 seven-torsion x-coordinates (#E[7]≤49; roots of the odd division polynomial ψ₇ are the order-7 x-coords, consistent with E[7]≅(ℤ/7)²; the concrete n=7 level of th…
Ecdlp.Curve.secp256k1_seven_torsion_x_card_le
Full ledger claim and scope
≤ 24 seven-torsion `x`-coordinates (`#E[7]≤49`; roots of the odd division polynomial `ψ₇` are the order-7 `x`-coords, consistent with `E[7]≅(ℤ/7)²`; the concrete `n=7` level of the uniform odd bound)
- Domain
- ecdlp-ledger
- Method
- Mathlib
≤ 3 two-torsion x-coordinates (#roots Ψ₂Sq ≤ 3)
Ecdlp.Curve.secp256k1_two_torsion_x_card_le
Full ledger claim and scope
≤ 3 two-torsion `x`-coordinates (`#roots Ψ₂Sq ≤ 3`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
≤ 4 nonzero 3-torsion x-coordinates on secp256k1 (secp256k1_threeTorsionX_ncard_le: threeTorsionX.ncard ≤ 4 — upgrades the forward-only degree-4 *root* bound to a bound on t…
Ecdlp.Curve.secp256k1_threeTorsionX_ncard_le
Full ledger claim and scope
≤ 4 nonzero 3-torsion `x`-coordinates on secp256k1 (`secp256k1_threeTorsionX_ncard_le`: `threeTorsionX.ncard ≤ 4` — upgrades the forward-only degree-4 *root* bound to a bound on the actual *set* of 3-torsion `x`-values, the set-level payoff of the n=3 bridge)
- Domain
- ecdlp-ledger
- Method
- bridge + `secp256k1_three_torsion_x_card_le` + Mathlib (`Set.ncard_le_ncard`, `Multiset.toFinset_card_le`)
≤ 4 three-torsion x-coordinates (#E[3] ≤ 9; GLV/CM torsion)
Ecdlp.Curve.secp256k1_three_torsion_x_card_le
Full ledger claim and scope
≤ 4 three-torsion `x`-coordinates (`#E[3] ≤ 9`; GLV/CM torsion)
- Domain
- ecdlp-ledger
- Method
- Mathlib
≤ (n²−1)/2 odd-n-torsion x-coordinates (uniform #E[n]≤n² for every odd n coprime to p; the general statement behind the 3-/5-torsion nodes)
Ecdlp.Curve.secp256k1_odd_torsion_x_card_le
Full ledger claim and scope
≤ `(n²−1)/2` odd-`n`-torsion `x`-coordinates (uniform `#E[n]≤n²` for every odd `n` coprime to `p`; the general statement behind the 3-/5-torsion nodes)
- Domain
- ecdlp-ledger
- Method
- Mathlib
⟨G⟩ ⊆ E[n] (base-point subgroup lies in the n-torsion when ord G ∣ n)
Ecdlp.Torsion.zmultiples_le_torsionBy
Full ledger claim and scope
⟨G⟩ ⊆ E[n]` (base-point subgroup lies in the `n`-torsion when `ord G ∣ n`)
- Domain
- ecdlp-ledger
- Method
- Mathlib
ResearchOS
Kernel standard
#
AP-A1
AnalyticAt.eventuallyEq_of_codiscreteWithin
Ledger scopeTwo functions analytic at a point that agree off a set codiscrete within U, at a point of U where U accumulates, agree on a whole neighbourhood of that point. A local upgrade of agreement; it identifies no function and computes nothing.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
AP-A2
Complex.circleIntegral_logDeriv_eq_divisor_sum
Ledger scopeThe argument principle in the only form the pin supports without a winding-number theory: for f analytic on a closed disc of radius R greater than 0 and nonvanishing on its boundary circle, the contour integral of f's logarithmic derivative equals 2πi times the divisor sum over the OPEN disc. The sum is over an arbitrary open disc of an arbitrary f, so no truncation family is chosen and no particular function is named. Positivity of R is required for TRUTH, not convenience: at R = −1 every hypothesis is vacuous and the sum is 0 while the integral is not.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
AP-A3
Complex.circleIntegral_logDeriv_eq_zero_iff
Ledger scopeVanishing criterion for the same integral: it is zero exactly when the divisor sum over the open disc is zero. An equivalence between two quantities already in scope; it does not assert that either is zero for any particular f, and it too is false at negative R.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
AP-A4
Complex.exists_nat_circleIntegral_logDeriv_eq
Ledger scopeThe same integral is 2πi times a NATURAL number. Existence only: no value is computed and no lower bound given, so this is compatible with the count being zero. The natural-number codomain is what makes positivity of R load-bearing here, since at R = −1 the integral can be −2πi, which no natural multiple matches.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
AP-W1
circleIntegral.integral_sub_inv_of_notMem_closedBall
Ledger scopeThe contour integral of (z − w)⁻¹ over the circle of radius R about c vanishes when w lies OUTSIDE the closed disc of radius abs R. The excluded region is the closed disc of GEOMETRIC radius abs R, not of R, which is why this statement survives a negative radius where the disc statements below do not.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
GO-1
Complex.maxModulus
Ledger scopeDefinition only: the supremum of ‖f‖ over the sphere of radius r, the carrier the order is built on. Totalized like every other def on this shelf; the junk branch is documented at the declaration and asserts nothing.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
GO-2
Complex.growthOrder
Ledger scopeDefinition only: the growth order of an arbitrary f as an ℝ≥0∞-valued limsup. This is a design commitment about vocabulary, accepted as such in a separate stage-one review; it computes nothing, bounds nothing, and is not a growth theorem for any particular function.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
GO-3
Complex.growthType
Ledger scopeDefinition only: the growth type at exponent p, gated on finite positive order, with junk conventions kept symmetric with GO-2. No statement below evaluates it outside that documented gate.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
GO-4
Complex.growthOrder_const
Ledger scopeThe order of a constant function is 0 — one of the three smoke tests confirming the chosen convention returns the classical value; it is evidence about the definition, not about any function of interest.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
GO-5
Complex.growthOrder_polynomial
Ledger scopeThe order of a polynomial is 0, stated without slack: not ≤ ε and not via natDegree. One of the two HIGH-severity obligations of the package, discharged at full statement strength.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
GO-6
Complex.growthOrder_exp
Ledger scopeThe order of Complex.exp is exactly 1 — the smoke test that the convention distinguishes order zero from order one; it says nothing about any other function.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
GO-7
Complex.growthOrder_le_of_eventually_le
Ledger scopeMonotonicity: an eventual pointwise norm bound of f by g forces growthOrder f ≤ growthOrder g. Proved unconditionally as stated, with the totalization clamps carrying the degenerate cases.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
GO-8
Complex.growthOrder_mul_le
Ledger scopeThe order of a product of two continuous functions is at most the max of their orders. The second HIGH-severity obligation, and the statement carries no ε slack — the ε used inside the proof is proof-internal and never reaches the statement. Equality is NOT claimed.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
GO-9
Complex.growthType_exp
Ledger scopeThe type of Complex.exp at exponent one is 1 — the smoke test for GO-3, evaluated strictly inside that definition's documented gate.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
HK-1
poissonKernel_mem_Icc
Ledger scopeTwo-sided bound placing poissonKernel c w z, for z on the sphere of radius R about c and w in the open ball, in the closed interval from (R − ‖w − c‖)/(R + ‖w − c‖) to (R + ‖w − c‖)/(R − ‖w − c‖); it repackages two already-pinned Mathlib Herglotz–Riesz bounds onto poissonKernel and establishes no new kernel estimate.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
HK-2
continuousOn_poissonKernel
Ledger scopeContinuity of poissonKernel c w on the sphere of radius R about c, for w in the open ball; re-proved here only because the in-tree analogue is private and so uncitable, and consumed solely to supply the circle-integrability side condition of HK-3.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
HK-3
InnerProductSpace.HarmonicOnNhd.harnack
Ledger scopeHarnack double inequality with the classical constants for f harmonic on a neighbourhood of closedBall c R and nonnegative there: (R − ‖w − c‖)/(R + ‖w − c‖) · f c ≤ f w ≤ (R + ‖w − c‖)/(R − ‖w − c‖) · f c for w in the open ball; sharpness of the constants is not claimed as a statement, no f is exhibited, and both CircleIntegrable hypotheses are carried so the circle-average comparison is not junk-valued.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
HK-4
InnerProductSpace.HarmonicOnNhd.harnack_half
Ledger scopeFactor-3 corollary of that double inequality on the closed half-radius ball: f c / 3 ≤ f w ≤ 3 · f c whenever ‖w − c‖ ≤ R / 2, with 0 < R carried as an explicit hypothesis because closed-ball membership does not force it; the constant 3 is the arithmetic of the radius ratio, not an optimality claim.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
HK-5
InnerProductSpace.HarmonicOnNhd.pos_of_pos_center
Ledger scopePropagation of strict positivity from the center: a harmonic f that is nonnegative on closedBall c R and satisfies 0 < f c is strictly positive at every w in the open ball; immediate from the lower half of HK-3, with no statement about the boundary sphere and no lower bound beyond the one HK-3 already gives.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
MB-1
norm_mellin_le
Ledger scopeUnconditional inequality bounding the norm of the Mellin transform of any f by the real integral of t^(re s − 1)·‖f t‖ over Ioi 0; it takes no hypothesis on f, computes no transform, and asserts no convergence.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
MB-2
norm_mellin_le_of_norm_le
Ledger scopeThe same bound relayed through a pointwise majorant g of ‖f‖ on Ioi 0, whose weighted integral is ASSUMED integrable; the integrability hypothesis sits on the bound and never on f, and the right-hand side depends on s only through re s.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
MB-3A
setIntegral_rpow_mul_mono_exponent
Ledger scopeMonotonicity of the real integral of t^(σ − 1)·g t in the exponent σ, for g nonnegative on Ioi 0 and vanishing on Ioo 0 1 with both endpoint integrabilities assumed; the support restriction is load-bearing, since the unrestricted statement is false.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
MB-3B
norm_mellin_le_of_re_le
Ledger scopeMellin-level consequence of that monotonicity on the same integrand class: a single integrability check at the exponent b bounds the norm of the Mellin transform for every s with re s ≤ b; no transform value is produced.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
MB-4
norm_mellin_le_add_of_re_mem_Icc
Ledger scopeUniform bound on the closed vertical strip a ≤ re s ≤ b by the sum of the two endpoint integrals, with a.e.-strong measurability of g carried explicitly because it is not derivable from the endpoint integrability hypotheses; no support restriction and no statement about any particular f.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
PL-1
Complex.iteratedDeriv_eq_zero_of_norm_le_pow
Ledger scopeFor an arbitrary Banach-space-valued entire f bounded by C·(1 + ‖z‖)^n, every iterated derivative of order k > n vanishes at every centre; a Cauchy-estimate statement about a hypothesised growth bound, computing no derivative and naming no particular f.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
PL-2
Complex.taylorSum_eq_of_norm_le_pow
Ledger scopeUnder the same hypothesised polynomial growth bound, such an f equals its degree-n Taylor sum at every centre, by uniqueness of HasSum against the pinned entire Taylor series; it produces no coefficient values and asserts no convergence beyond that pinned series.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
PL-3
Complex.exists_polynomial_of_norm_le_pow
Ledger scopePackaging over ℂ → ℂ: an entire f bounded by C·(1 + ‖z‖)^n is the evaluation of some Polynomial ℂ of natDegree at most n; a pure existence statement whose hypothesis must be supplied elsewhere, with no growth bound established for any named function.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
PL-4
Complex.exists_const_forall_eq_of_norm_le
Ledger scopeDegree-0 corollary: a bounded entire ℂ → ℂ function is constant. This is classical Liouville, already available at the pin via Differentiable.exists_const_forall_eq_of_bounded; the row records a second derivation used as the package's sanity anchor, not a new mathematical fact.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
PL-5
Complex.exists_affine_of_norm_le_pow_one
Ledger scopeDegree-1 corollary: an entire ℂ → ℂ function bounded by C·(1 + ‖z‖) is affine, f z = a·z + b for some a b; an existence statement about an arbitrary f satisfying an assumed linear growth bound.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
TC-1
sSupNormCircle
Ledger scopeDefinition only: the supremum of ‖f‖ over the circle of radius r about the origin, for an arbitrary f into an arbitrary normed group. It is totalized — on a radius where the image is unbounded or the circle is empty the sSup junk value stands — so no row below may be read as asserting that the supremum is attained or finite unless it says so.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
TC-10
norm_le_interp_of_norm_eq'
Ledger scopeThe same pointwise bound respelled with the classical log-ratio exponents log(r₃/r₂)/log(r₃/r₁) and log(r₂/r₁)/log(r₃/r₁); an equivalent restatement of TC-8, adding no strength.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
TC-11
norm_le_of_mem_annulus
Ledger scopeMaximum principle on the annulus as a corollary: when both boundary circles carry the SAME bound M, ‖f‖ ≤ M throughout the closed annulus. The equal-bounds hypothesis is what collapses the interpolation; the unequal case is exactly TC-8 and is not strengthened here.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
TC-2
sSupNormCircle_nonneg
Ledger scopeThat supremum is nonnegative, for every f and every radius, with no hypothesis at all; it holds on the junk branch too and therefore asserts nothing about f.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
TC-3
bddAbove_image_norm_sphere
Ledger scopeFor f continuous on the sphere of radius r, the image of ‖f‖ on that sphere is bounded above; this is the hypothesis that takes the def off its junk branch, and it is required explicitly wherever that matters.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
TC-4
le_sSupNormCircle
Ledger scopePointwise bound ‖f w‖ ≤ sSupNormCircle f r at any w of norm r, given continuity of f on that sphere; a one-directional bound only, with no claim that the supremum is attained.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
TC-5
exp_mem_annulus_of_mem_verticalClosedStrip
Ledger scopeBookkeeping: exp carries the closed vertical strip between log r₁ and log r₃ into the closed annulus r₁ ≤ ‖z‖ ≤ r₃, for positive radii. A statement about exp alone; no f appears.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
TC-6
exp_mem_annulus_of_mem_verticalStrip
Ledger scopeThe open-strip twin of the previous row: exp carries the open vertical strip into the open annulus. Again about exp alone.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
TC-7
exists_exp_eq_of_norm_eq
Ledger scopeEvery point of the circle of radius r > 0 is exp w for some w with w.re = log r — the surjectivity leg of the transport. Pure existence: no branch of the logarithm is chosen and no w is produced canonically.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
TC-8
norm_le_interp_of_norm_eq
Ledger scopeHadamard three circles, pointwise form: for f differentiable on the open annulus and continuous on the closed one, with ‖f‖ ≤ M₁ on the inner circle and ≤ M₃ on the outer, ‖f z‖ at radius r₂ is bounded by the log-interpolated product of M₁ and M₃. Both boundary bounds are HYPOTHESES; nothing here computes a maximum modulus of anything.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
TC-9
sSupNormCircle_le_interp
Ledger scopeThe supremum-level form of the same bound: log-convexity of the circle maximum across the annulus, stated on the TC1 def under the same differentiability and continuity hypotheses. Sharpness of the exponents is not claimed, and no extremal f is exhibited.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W10A
weierstrassProduct_eq_tprod_mul_tprod_compl
Ledger scopePointwise split of the canonical product over an arbitrary subset and its complement.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W10B
analyticAt_tprod_compl
Ledger scopePointwise analyticity of the complementary subproduct under the same family hypotheses.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W10C
weierstrassProduct_ne_zero_of_forall_ne
Ledger scopeThe canonical product is nonzero at a point avoided by every family value, under the convergence hypotheses.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W11
weierstrassProduct_eq_zero_iff
Ledger scopeExact pointwise zero-set equivalence between the canonical product and the indexed family under the stated hypotheses; it is not a global enumeration.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W12A
analyticOrderAt_weierstrassFactor_one
Ledger scopeThe elementary factor has analytic order one at its unique zero.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W12B
analyticOrderAt_weierstrassFactor_div
Ledger scopeTransported simple-zero order for an elementary factor scaled by an arbitrary nonzero centre.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W12C
analyticOrderAt_finsetProd
Ledger scopeAdditivity of local analytic order across a finite product of functions analytic at the point.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W12D
analyticOrderAt_weierstrassProduct
Ledger scopeThe product's local analytic order at one point equals the natural cardinality of that point's finite fibre; this is local multiplicity only, not global zero counting.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W12E
analyticOrderAt_weierstrassProduct_ne_top
Ledger scopeCapstone corollary that the local order is not top under the same hypotheses; alone this inequality does not certify analyticity.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W1A
weierstrassFactor
Ledger scopeDefinition only of the genus-p elementary factor for an arbitrary complex argument; it selects no genus and asserts no convergence.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W1B
weierstrassFactor_apply_zero
Ledger scopeEvaluation of every elementary factor at zero as one; no product statement is involved.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W1C
weierstrassFactor_genus_zero
Ledger scopeThe genus-zero elementary factor is exactly one minus its argument.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W1D
weierstrassFactor_succ
Ledger scopeRecurrence from genus p to genus p+1 for one elementary factor; this does not choose p.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W2A
differentiable_weierstrassFactor
Ledger scopeGlobal complex differentiability of one fixed-genus elementary factor.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W2B
analyticAt_weierstrassFactor
Ledger scopePointwise analyticity of one fixed-genus elementary factor.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W3A
weierstrassFactor_eq_zero_iff
Ledger scopeAn elementary factor vanishes exactly when its argument is one.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W3B
weierstrassFactor_ne_zero
Ledger scopeNonvanishing of an elementary factor away from argument one.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W4A
logTaylor_neg_eq
Ledger scopeFinite-sum algebra identity relating the pinned logarithmic Taylor polynomial to the elementary-factor exponent.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W4B
weierstrassFactor_eq_exp
Ledger scopeBranch-managed exponential representation of one elementary factor away from its zero.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W5
norm_log_one_sub_add_sum_le
Ledger scopeLocal logarithmic remainder estimate under norm strictly less than one, for arbitrary genus and argument.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W6
norm_weierstrassFactor_sub_one_le
Ledger scopeElementary-factor tail estimate on the closed half-disc; no sharper unit-disc estimate is claimed.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W7A
weierstrassProduct
Ledger scopeTotalized infinite-product definition for a fixed genus and arbitrary indexed family; the definition alone is not a convergence claim.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W7B
eventually_cofinite_le_norm
Ledger scopeA nonzero family with the stated inverse-power summability eventually escapes every real norm threshold cofinitely.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W7C
finite_setOf_apply_eq
Ledger scopeEvery fibre of such a nonzero summable family is finite; this is pointwise finiteness, not a global count.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W8A
summable_norm_weierstrassFactor_sub_one
Ledger scopePointwise absolute summability of elementary-factor tails under the explicit inverse-power summability hypothesis.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W8B
hasProdLocallyUniformlyOn_weierstrassProduct
Ledger scopeLocally uniform convergence of the canonical product on the whole complex plane under the stated family hypotheses.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W9A
differentiable_weierstrassProduct
Ledger scopeGlobal differentiability of the canonical product under the explicit nonzero and summability hypotheses.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
WF-W9B
analyticAt_weierstrassProduct
Ledger scopePointwise analyticity of that canonical product under the same hypotheses.
- Domain
- analysis-generic
- Method
- Mathlib
ResearchOS
Kernel standard
#
nt-carmichael-1105-composite
ResearchOS.NumberTheory.carmichael_1105_not_prime
Ledger scopeCompositeness of 1105 only.
- Domain
- number-theory-elementary
- Method
- norm_num
ResearchOS
Kernel standard
#
nt-carmichael-1105-korselt
ResearchOS.NumberTheory.carmichael_1105_factorization
Ledger scopeThe arithmetic identity 1105 = 5·13·17 only.
- Domain
- number-theory-elementary
- Method
- norm_num
ResearchOS
Kernel standard
#
nt-carmichael-1729-composite
ResearchOS.NumberTheory.carmichael_1729_not_prime
Ledger scopeCompositeness of 1729 only.
- Domain
- number-theory-elementary
- Method
- norm_num
ResearchOS
Kernel standard
#
nt-carmichael-1729-korselt
ResearchOS.NumberTheory.carmichael_1729_factorization
Ledger scopeThe arithmetic identity 1729 = 7·13·19 only.
- Domain
- number-theory-elementary
- Method
- norm_num
ResearchOS
Kernel standard
#
nt-carmichael-561-composite
ResearchOS.NumberTheory.carmichael_561_not_prime
Ledger scopeCompositeness of 561 only; Carmichael property itself is not formalized.
- Domain
- number-theory-elementary
- Method
- norm_num
ResearchOS
Kernel standard
#
nt-carmichael-561-korselt
ResearchOS.NumberTheory.carmichael_561_factorization
Ledger scopeThe arithmetic identity 561 = 3·11·17 only; Korselt's criterion is not formalized.
- Domain
- number-theory-elementary
- Method
- norm_num
ResearchOS
Kernel standard
#
nt-mersenne-m13
ResearchOS.NumberTheory.mersenne_M13_prime
Ledger scopePrimality of 8191 only; no statement about Mersenne primes in general.
- Domain
- number-theory-elementary
- Method
- norm_num
ResearchOS
Kernel standard
#
nt-mersenne-m17
ResearchOS.NumberTheory.mersenne_M17_prime
Ledger scopePrimality of 131071 only.
- Domain
- number-theory-elementary
- Method
- norm_num
ResearchOS
Kernel standard
#
nt-mersenne-m19
ResearchOS.NumberTheory.mersenne_M19_prime
Ledger scopePrimality of 524287 only.
- Domain
- number-theory-elementary
- Method
- norm_num
ResearchOS
Kernel standard
#
nt-prime-2017
ResearchOS.NumberTheory.prime_2017
Ledger scopeA single primality fact; implies nothing beyond 2017 being prime.
- Domain
- number-theory-elementary
- Method
- norm_num
ResearchOS
Kernel standard
#
nt-twin-10007-10009
ResearchOS.NumberTheory.prime_10007 ResearchOS.NumberTheory.prime_10009
Ledger scopeTwo primality facts; the twin-pair framing is descriptive, not a formalized twin-prime statement.
- Domain
- number-theory-elementary
- Method
- norm_num
ResearchOS
Kernel standard
#
RH-BRIDGE-P1
riemannZeta_ne_zero_of_re_le_zero
Ledger scopeNonvanishing on re(s) ≤ 0 away from the exact trivial zeros; says nothing about the strip or the line.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-BRIDGE-P2
riemannZeta_zero_mem_critical_strip
Ledger scopeLocates nontrivial zeros in the open strip 0 < re < 1 only; no statement about re = 1/2.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-BRIDGE-P2C
riemannZeta_ne_zero_of_re_eq_zero
Ledger scopeNonvanishing on the single line re = 0; a corollary of P1, nothing more.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-BRIDGE-P3
riemannZeta_one_sub_eq_zero_iff
Ledger scopeZero reflection s ↔ 1−s inside the open strip only; no multiplicity is transported.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-BRIDGE-P4
riemannHypothesis_iff_zero_free_gt_half
Ledger scopeAn equivalence of two open formulations; proves neither side.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-BRIDGE-P5
riemannHypothesis_iff_zetaZeros_re_eq_half
Ledger scopeAn equivalence with the critical-line formulation over the zero set; proves neither side; the set carries no multiplicity.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-BRIDGE-P5T
one_notMem_riemannZetaZeros
Ledger scopeThe totalized value at 1 is nonzero; a translation fact about the zero-set object.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-BRIDGE-P5X
riemannHypothesis_iff_zetaZeros_re_eq_half'
Ledger scopeLiteral source-side wrapper of RH-BRIDGE-P5 with the redundant s ≠ 1 conjunct.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-CONJ-Z1
Gammaℝ_conj
Ledger scopeConjugation equivariance of the pinned real Gamma factor only; a helper identity with no zeta content.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-CONJ-Z2
riemannZeta_conj
Ledger scopeGlobal conjugation symmetry of the totalized zeta function; proved from the Dirichlet series and the identity theorem, not from the functional equation.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-CONJ-Z2C
riemannZeta_comp_conj
Ledger scopeFunction-level restatement of the same symmetry; adds no new mathematical content.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-CONJ-Z3
completedRiemannZeta₀_conj
Ledger scopeConjugation symmetry of the entire pole-removed completion; proved by an independent puncture-free identity-theorem pass.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-CONJ-Z4
completedRiemannZeta_conj
Ledger scopeConjugation symmetry of the totalized completion including its exceptional points; the pole terms transport by total division, not by meromorphic reasoning.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-CONJ-Z5
riemannZeta_conj_eq_zero_iff
Ledger scopeMembership-level zero equivalence under conjugation; no multiplicity is transported.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-CONJ-Z6I
riemannZetaZeros_conj_image
Ledger scopeSet-level invariance of the pinned zero set under the conjugation image; the set carries no multiplicity.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-CONJ-Z6P
riemannZetaZeros_conj_preimage
Ledger scopeSet-level invariance of the pinned zero set under the conjugation preimage; the set carries no multiplicity.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-CONJ-Z7
riemannXi_conj
Ledger scopeConjugation symmetry of the repository-local entire xi normalization; inherits the analytic content of Z3.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-CONJ-Z7C
riemannXi_comp_conj
Ledger scopeFunction-level restatement of the xi symmetry; adds no new mathematical content.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-CONJ-Z8
riemannZeta_fourfold_zero
Ledger scopeSet-level fourfold zero action inside the open critical strip; consumes the kernel-checked bridge P3 and asserts nothing about re = 1/2.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-CONJ-Z8P
riemannZeta_fourfold_zero'
Ledger scopeThe same fourfold action stated with the exact trivial-zero exclusion; strip membership comes from the kernel-checked bridge P2.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-CONJ-Z9A
AnalyticAt.conj_conj
Ledger scopeGeneric complex-analysis lemma absent at the pin: analyticity is preserved by the antiholomorphic double composition; no zeta content.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-CONJ-Z9O
analyticOrderAt_conj_conj
Ledger scopeGeneric complex-analysis lemma absent at the pin: local analytic order is transported by the antiholomorphic double composition; no zeta content.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-CONJ-Z9X
analyticOrderAt_riemannXi_conj
Ledger scopePointwise analytic-order transport for the repository-local xi under conjugation; a local order statement only, with no divisor and no enumeration.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-CONJ-Z9Z
analyticOrderAt_riemannZeta_conj
Ledger scopePointwise analytic-order transport for zeta under conjugation; a local order statement only, with no divisor and no enumeration.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M1
riemannXi_comp_one_sub
Ledger scopeFunction-level restatement of the built xi functional symmetry; adds no new mathematical content.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M10
riemannXi_divisor_apply
Ledger scopePointwise value of the pinned Mathlib divisor of xi: the local analytic order, untop-zero totalized; no global object is constructed.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M11
riemannXi_divisor_nonneg
Ledger scopeNonnegativity of the xi divisor, as befits a zero divisor of an analytic function; says nothing about which points are zeros.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M12A
analyticOrderAt_riemannXi_ne_top
Ledger scopeFinite local analytic order of xi at every point, witnessed at 0 by the merged endpoint value; a local statement, not a growth bound.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M12B
meromorphicOrderAt_riemannXi_ne_top
Ledger scopeFinite local meromorphic order of xi at every point; the meromorphic-side twin of the analytic statement.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M13
riemannXi_divisor_support
Ledger scopeThe support of the xi divisor on a set equals the xi zero set there; local finiteness comes from the pinned carrier, and no infinitude is asserted.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M14R
riemannXi_divisor_one_sub
Ledger scopePointwise invariance of the xi divisor under s to 1-s; a value equality, not a pushforward of the carrier object.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M14RS
riemannXi_divisor_strip_one_sub
Ledger scopeThe reflection invariance instantiated on the open-strip carrier, which the reflection preserves.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M14RU
riemannXi_divisor_univ_one_sub
Ledger scopeThe reflection invariance instantiated on the full plane carrier.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M15C
riemannXi_divisor_conj
Ledger scopePointwise invariance of the xi divisor under conjugation; consumes the merged conjugation-order transport.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M15CS
riemannXi_divisor_strip_conj
Ledger scopeThe conjugation invariance instantiated on the open-strip carrier, which conjugation preserves.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M15CU
riemannXi_divisor_univ_conj
Ledger scopeThe conjugation invariance instantiated on the full plane carrier.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M15X
riemannXi_divisor_one_sub_conj
Ledger scopePointwise invariance of the xi divisor under the composite s to 1-conj s, the third of the three source symmetries.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M15XS
riemannXi_divisor_strip_one_sub_conj
Ledger scopeThe composite invariance instantiated on the open-strip carrier.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M15XU
riemannXi_divisor_univ_one_sub_conj
Ledger scopeThe composite invariance instantiated on the full plane carrier.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M16A
analyticOnNhd_riemannZeta_strip
Ledger scopeAnalyticity of zeta on the open critical strip, where the pole at 1 is excluded by the carrier.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M16B
meromorphicOn_riemannZeta_strip
Ledger scopeMeromorphy of zeta on the open strip, as needed by the pinned divisor carrier.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M16C
riemannZeta_divisor_strip_apply
Ledger scopePointwise value of the zeta divisor on the open strip: the local analytic order, untop-zero totalized.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M16D
riemannZeta_divisor_strip_nonneg
Ledger scopeNonnegativity of the zeta divisor on the open strip.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M16E
analyticOrderAt_riemannZeta_ne_top_of_mem_strip
Ledger scopeFinite local analytic order of zeta at every strip point; transported from the xi statement through the merged order equality.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M16F
meromorphicOrderAt_riemannZeta_ne_top_of_mem_strip
Ledger scopeFinite local meromorphic order of zeta at every strip point.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M16G
riemannZeta_divisor_strip_support
Ledger scopeThe support of the zeta divisor on the open strip equals the zeta zero set there; no infinitude is asserted.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M17C
riemannZeta_divisor_strip_conj
Ledger scopePointwise invariance of the strip zeta divisor under conjugation.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M17R
riemannZeta_divisor_strip_one_sub
Ledger scopePointwise invariance of the strip zeta divisor under s to 1-s.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M17X
riemannZeta_divisor_strip_one_sub_conj
Ledger scopePointwise invariance of the strip zeta divisor under the composite map; with the other rows this supplies the divisor leg of the S1-CONJ exit evidence.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M2
analyticOrderAt_comp_const_sub
Ledger scopeGeneric transport of local analytic order under precomposition with an affine reflection; no zeta content.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M3
analyticOrderAt_riemannXi_one_sub
Ledger scopePointwise local-order transport for xi under s to 1-s; a local statement with no divisor and no enumeration.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M4
analyticOrderAt_riemannZeta_one_sub
Ledger scopePointwise local-order transport for zeta under s to 1-s inside the open strip only, where the Gamma cofactor is nonvanishing.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M5
analyticOrderAt_riemannXi_one_sub_conj
Ledger scopePointwise local-order transport for xi under the composite s to 1-conj s; composes the reflection leg with the merged conjugation leg.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M6
analyticOrderAt_riemannZeta_one_sub_conj
Ledger scopePointwise local-order transport for zeta under the composite map inside the open strip only.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M7
analyticOrderAt_riemannXi_fourfold
Ledger scopeEquality of xi local orders across all four points of the symmetry orbit; pointwise only.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M8
analyticOrderAt_riemannZeta_fourfold
Ledger scopeEquality of zeta local orders across the orbit inside the open strip only.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M9A
analyticOnNhd_riemannXi
Ledger scopeAnalyticity of the built xi on any set; packaging of the merged entirety fact.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-MULT-M9B
meromorphicOn_riemannXi
Ledger scopeMeromorphy of xi on any set, as needed by the pinned divisor carrier; no pole content is asserted.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-D1
compl_riemannXi_zeroSet_mem_codiscrete
Ledger scopeThe complement of the xi zero set is codiscrete in the plane — the engine fact the rest of Block D is read off from. It asserts no zero exists; a function with no zeros at all satisfies it.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-D2
isClosed_riemannXi_zeroSet
Ledger scopeThe xi zero set is closed. Topology only; no zero is located and the empty set is closed.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-D3
isDiscrete_riemannXi_zeroSet
Ledger scopeThe xi zero set is discrete. Together with the previous row this is the classical 'isolated zeros' picture as a set statement, with no zero exhibited and no lower bound on how many there are.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-D4
IsCompact.inter_riemannXi_zeroSet_finite
Ledger scopeEvery compact set meets the xi zero set in a FINITE set. Stated for an arbitrary compact, so no window shape is chosen; it bounds nothing globally and is not a counting statement.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-D5
countable_riemannXi_zeroSet
Ledger scopeThe xi zero set is countable. An upper bound on cardinality only — it does not assert the set is infinite, and is consistent with it being empty.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-D6
tendsto_riemannXi_zeroSet_cofinite_cocompact
Ledger scopeFilter form of D4: along the cofinite filter on the zero set, the inclusion into the plane tends to the cocompact filter — zeros escape every compact. Vacuously true if the set is finite, so again no infinitude is claimed.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-D7A
isDiscrete_riemannXi_divisor_support
Ledger scopeThe support of the xi divisor is discrete, for an ARBITRARY region U. The divisor is Mathlib's untop-zero totalized MeromorphicOn.divisor, so this is a statement about that carrier and not about a zero count.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-D7B
isClosed_riemannXi_divisor_support
Ledger scopeThe same support is closed when U is closed. The hypothesis on U is load-bearing and is not dropped anywhere.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-D8
riemannXi_divisor_inter_support_finite
Ledger scopeThe divisor support meets every compact in a finite set, for arbitrary U. This is the finiteness that makes the Block N sums well defined; it is compact-by-compact and says nothing globally.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-D9
countable_riemannXi_divisor_support
Ledger scopeThe divisor support is countable, for arbitrary U. Upper bound only; no claim that it is infinite or nonempty.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-N12
riemannXi_divisor_finsum_mem_eq_sum
Ledger scopeThe finsum of the xi divisor over a compact K equals the honest finite Finset sum over the finite intersection supplied by RH-SLICE-D8 — the well-definedness statement that stops every later row from being a statement about a junk value.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-N13
riemannXi_divisor_finsum_mem_nonneg
Ledger scopeThat sum is nonnegative over any compact, inherited from the merged multiplicity package's per-point nonnegativity on xi. Nonnegative, not positive: zero is permitted and is the value when K misses the support.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-N14
riemannXi_divisor_finsum_mem_toNat
Ledger scopeThe same sum reads as a natural number: its toNat cast back to the integers is itself. A restatement of nonnegativity in the form later counting work would want; it still counts nothing.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-N15
riemannXi_divisor_finsum_mem_mono
Ledger scopeMonotone in the compact: enlarging K from K₁ to K₂ cannot decrease the sum. An inequality between two compacts, with no growth rate and no dependence on any parameter of K.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-N16C
riemannXi_divisor_finsum_mem_comp_one_sub
Ledger scopeReflection s ↦ 1 − s leaves the divisor sum over K unchanged, for U symmetric under that map. Substitution form: it transports a sum, and establishes no symmetry of the zeros beyond what the merged multiplicity package already proved.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-N16I
riemannXi_divisor_finsum_mem_image_one_sub
Ledger scopeImage form of the same reflection invariance: summing over the image of K under s ↦ 1 − s gives the same value as summing over K.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-N17C
riemannXi_divisor_finsum_mem_comp_conj
Ledger scopeConjugation s ↦ conj s leaves the divisor sum unchanged, for U symmetric under conjugation; substitution form, provenance the merged conjugation package.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-N17I
riemannXi_divisor_finsum_mem_image_conj
Ledger scopeImage form of conjugation invariance.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-N18C
riemannXi_divisor_finsum_mem_comp_one_sub_conj
Ledger scopeThe composite s ↦ 1 − conj s leaves the divisor sum unchanged, given both symmetry hypotheses on U; substitution form. This is the map whose fixed-point set is the critical line, but nothing here says anything about that line or about where the zeros are.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-N18I
riemannXi_divisor_finsum_mem_image_one_sub_conj
Ledger scopeImage form of the composite invariance, under the same two hypotheses on U.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-N19A
image_one_sub_of_symm
Ledger scopeGeneric set identity: a set symmetric under w ↦ 1 − w is its own image under that map. No xi, no zeta, no divisor — pure set theory, present so the image forms above can be applied to a symmetric window.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-N19B
image_conj_of_symm
Ledger scopeThe same generic identity for complex conjugation.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-SLICE-N19C
image_one_sub_conj_of_symm
Ledger scopeThe same generic identity for the composite w ↦ 1 − conj w.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-XI-X1
riemannXi
Ledger scopeChosen entire xi normalization only; this definition makes no assertion about RH.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-XI-X10
riemannHypothesis_iff_riemannXi_zeros_re_eq_half
Ledger scopeEquivalent xi-zero formulation of canonical RH; proves neither side and is foundation-only.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-XI-X11
analyticOrderAt_riemannXi_eq_riemannZeta
Ledger scopeLocal analytic-order equality inside the open strip only; no divisor or symmetry action is constructed.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-XI-X2
differentiable_riemannXi
Ledger scopeGlobal complex differentiability of the chosen xi normalization.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-XI-X3
riemannXi_one_sub
Ledger scopeFunctional symmetry under s ↦ 1−s for the chosen xi normalization.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-XI-X4O
riemannXi_one
Ledger scopeEndpoint value xi(1) = 1/2 from the entire formula.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-XI-X4Z
riemannXi_zero
Ledger scopeEndpoint value xi(0) = 1/2 from the entire formula.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-XI-X5
riemannXi_eq_of_ne
Ledger scopeOff the endpoints, identifies xi with the completed-zeta product using the pinned sign convention.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-XI-X6
riemannXi_eq_zero_iff_riemannZeta_eq_zero
Ledger scopeExact xi and zeta zero correspondence under explicit endpoint and trivial-zero exclusions.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-XI-X7
riemannXi_ne_zero_of_one_le_re
Ledger scopeXi nonvanishing on the closed half-plane re(s) ≥ 1.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-XI-X8
riemannXi_ne_zero_of_re_le_zero
Ledger scopeXi nonvanishing on the closed half-plane re(s) ≤ 0 by reflection.
- Domain
- riemann-hypothesis
- Method
- Mathlib
ResearchOS
Kernel standard
#
RH-XI-X9
riemannXi_zero_mem_critical_strip
Ledger scopeEvery xi zero lies in the open critical strip; no critical-line claim is made.
- Domain
- riemann-hypothesis
- Method
- Mathlib
No verified results match this filter.