Source: PROOF-NARRATIVE.md §3 KT-2 (Alexander wired in PR #30), KT-7 (HOMFLY).
Context
PR #30 wired KnotTheory.alexander_polynomial into quandle_descriptor. The audit found three more polynomial invariants already in KnotTheory.jl:
| Polynomial |
Signature |
LoC location |
jones_polynomial(pd; wr=0) |
-> Dict{Int, Int} |
src/KnotTheory.jl:1557 |
conway_polynomial(pd) |
-> Dict{Int, Int} (likely) |
src/KnotTheory.jl:1445 |
homfly_polynomial(pd) |
-> Dict{Tuple{Int,Int}, Int} |
src/KnotTheory.jl:1683 |
Why valuable
- Jones subsumes Alexander on many discrimination questions. Cheap to compute.
- Conway generalises Alexander; substitution
Δ(t) = ∇(t^{1/2} - t^{-1/2}).
- HOMFLY subsumes both Alexander and Jones (
P(1, z) ~ Δ(z), P(t, t^{1/2}-t^{-1/2}) ~ V(t)). Strongest of the four. Has a hard 15-crossing limit.
A descriptor with all four polynomials is dramatically more discriminating than colouring counts + Alexander alone.
Acceptance criteria
Effort
~4 hours. Each polynomial is a one-line wiring like Alexander. HOMFLY needs a different serialiser (tuple-keyed) but the structure is fixed.
Risk
- HOMFLY is exponential. Above 15 crossings the guard kicks in — defer rather than fail. This means the descriptor field can be
"deferred:..." for knots above the bound.
- Larger
quandle_key strings may break downstream consumers parsing on :. Audit server/serve.jl for key parsers before extending.
Cross-references
Source: PROOF-NARRATIVE.md §3 KT-2 (Alexander wired in PR #30), KT-7 (HOMFLY).
Context
PR #30 wired
KnotTheory.alexander_polynomialintoquandle_descriptor. The audit found three more polynomial invariants already inKnotTheory.jl:jones_polynomial(pd; wr=0)-> Dict{Int, Int}src/KnotTheory.jl:1557conway_polynomial(pd)-> Dict{Int, Int}(likely)src/KnotTheory.jl:1445homfly_polynomial(pd)-> Dict{Tuple{Int,Int}, Int}src/KnotTheory.jl:1683Why valuable
Δ(t) = ∇(t^{1/2} - t^{-1/2}).P(1, z) ~ Δ(z),P(t, t^{1/2}-t^{-1/2}) ~ V(t)). Strongest of the four. Has a hard 15-crossing limit.A descriptor with all four polynomials is dramatically more discriminating than colouring counts + Alexander alone.
Acceptance criteria
jones_polynomial(pd)intoquandle_descriptor. Serialise via existing_serialise_int_poly(same Laurent shape as Alexander).conway_polynomial(pd)intoquandle_descriptor. Same serialisation.homfly_polynomial(pd)intoquandle_descriptor. Add a new_serialise_int_poly_2var(poly::Dict{Tuple{Int,Int}, Int}) -> Stringhelper using the form"a_exp,z_exp:coeff;a_exp,z_exp:coeff;..."(or mirror Skein.jl's format if it has one).n > MAX_CROSSINGS_FOR_HOMFLY(15) — return"deferred:too_many_crossings"rather than throw.quandle_keywith the three new columns.Effort
~4 hours. Each polynomial is a one-line wiring like Alexander. HOMFLY needs a different serialiser (tuple-keyed) but the structure is fixed.
Risk
"deferred:..."for knots above the bound.quandle_keystrings may break downstream consumers parsing on:. Auditserver/serve.jlfor key parsers before extending.Cross-references
/tmp/krl-quandle-tangle-audit-2026-06-01.mdtable KT-2, KT-7.KnotTheory.jones_polynomial,conway_polynomial,homfly_polynomial.