Summary
The reduction HamiltonianCircuit → StackerCrane → ILP returns Or(false) on the prism graph, which has a valid Hamiltonian circuit. All other 2-step HC→ILP paths return Or(true).
Reproduction
pred create --example HamiltonianCircuit -o hc.json
pred reduce hc.json --to StackerCrane | pred solve -
# Returns Or(false) — should be Or(true)
The prism graph (6 vertices, 9 edges) has Hamiltonian circuit [0, 1, 4, 3, 5, 2].
Root cause
The StackerCrane solver returns Min(6) with solution [1, 2, 3, 0, 5, 4]. After extract_solution maps it back to HC, the same config [1, 2, 3, 0, 5, 4] is returned. However, this is not a valid Hamiltonian circuit — edges 2→3 and 0→5 do not exist in the prism graph:
1 → 2 ✅
2 → 3 ❌ (not an edge in prism graph)
3 → 0 ✅
0 → 5 ❌ (not an edge in prism graph)
5 → 4 ✅
4 → 1 ✅
This means either HC → StackerCrane reduce_to() constructs an incorrect StackerCrane instance, or extract_solution() incorrectly maps the StackerCrane solution back to HC.
Comparison with other paths
| Path |
Result |
Solution |
Valid HC? |
| HC → HamiltonianPath → ILP |
Or(true) |
[0, 1, 4, 3, 5, 2] |
✅ |
| HC → TravelingSalesman → ILP |
Or(true) |
[0, 1, 2, 5, 4, 3] |
✅ |
| HC → RuralPostman → ILP |
Or(true) |
[0, 3, 5, 4, 1, 2] |
✅ |
| HC → QuadraticAssignment → ILP |
Or(true) |
[0, 1, 2, 5, 4, 3] |
✅ |
| HC → StrongConnectivityAugmentation → ILP |
Or(true) |
[0, 3, 5, 4, 1, 2] |
✅ |
| HC → BottleneckTravelingSalesman → ILP |
Or(true) |
[0, 1, 2, 5, 4, 3] |
✅ |
| HC → BiconnectivityAugmentation → ILP |
Or(true) |
[0, 2, 1, 4, 5, 3] |
✅ |
| HC → StackerCrane → ILP |
Or(false) |
[1, 2, 3, 0, 5, 4] |
❌ |
Files to investigate
src/rules/hamiltoniancircuit_stackercrane.rs — reduce_to() and extract_solution()
src/rules/stackercrane_ilp.rs — StackerCrane → ILP reduction
Summary
The reduction
HamiltonianCircuit → StackerCrane → ILPreturnsOr(false)on the prism graph, which has a valid Hamiltonian circuit. All other 2-step HC→ILP paths returnOr(true).Reproduction
The prism graph (6 vertices, 9 edges) has Hamiltonian circuit
[0, 1, 4, 3, 5, 2].Root cause
The StackerCrane solver returns
Min(6)with solution[1, 2, 3, 0, 5, 4]. Afterextract_solutionmaps it back to HC, the same config[1, 2, 3, 0, 5, 4]is returned. However, this is not a valid Hamiltonian circuit — edges2→3and0→5do not exist in the prism graph:This means either
HC → StackerCranereduce_to()constructs an incorrect StackerCrane instance, orextract_solution()incorrectly maps the StackerCrane solution back to HC.Comparison with other paths
[0, 1, 4, 3, 5, 2][0, 1, 2, 5, 4, 3][0, 3, 5, 4, 1, 2][0, 1, 2, 5, 4, 3][0, 3, 5, 4, 1, 2][0, 1, 2, 5, 4, 3][0, 2, 1, 4, 5, 3][1, 2, 3, 0, 5, 4]Files to investigate
src/rules/hamiltoniancircuit_stackercrane.rs—reduce_to()andextract_solution()src/rules/stackercrane_ilp.rs— StackerCrane → ILP reduction