A solver schedule becomes a certificate when independent computations agree. Every constraint class is re-checked on the decoded values at build time, the solver's own bound meets its objective, and an exhaustive search over every machine-ordering combination independently reaches the same minimum makespan — three agreements, not one claim taken on trust.

highlighted = computed this step

Independent re-verification

This repo's own exact integer arithmetic re-checks the decoded schedule at every build: all 8 interval durations, all 5 precedence rules, and all 3 machine no-overlap rules, plus the makespan variable must equal the latest task end and the reported objective. Why: an independent check must not reuse the solver's code path, and any violation would stop the build rather than let a wrong schedule through.

every constraint re-checked exactly\text{every constraint re-checked exactly}
Re-verified scheduleEvery constraint class is re-checked with own exact arithmetic; the bound meets the makespan.bound 11 meets makespan 11M1M2M3J1 T1[2,5]J1 T2[5,7]J1 T3[7,9]J2 T1[0,2]J2 T2[2,3]J2 T3[7,11]J3 T1[0,4]J3 T2[4,7]makespan 11011time

The contention gap

Every job needs 7 time units end to end, and the busiest machine carries 10, so the best bound obtainable without choosing any task order is 10 — yet the certified makespan is 11. Why: the gap is exactly resource contention, machines being busy when a job is ready, and closing it needs an actual sequencing decision, not just a load count.

gap=11−10\text{gap}=11- 10
Re-verified scheduleEvery constraint class is re-checked with own exact arithmetic; the bound meets the makespan.bound 11 meets makespan 11M1M2M3J1 T1[2,5]J1 T2[5,7]J1 T3[7,9]J2 T1[0,2]J2 T2[2,3]J2 T3[7,11]J3 T1[0,4]J3 T2[4,7]makespan 11011time

An exhaustive second proof

This repo also enumerates every combination of per-machine task orderings, 72 in all, discards the 28 that conflict with job precedence, and takes the minimum makespan over the remaining 44. Why: the true optimum is always attained by some choice of per-machine ordering, so this exhaustive search is a genuine second, solver-independent proof, tractable enough to run on every build rather than a claim that no such check is possible.

min⁡(makespan)=11\min(\text{makespan})=11
Re-verified scheduleEvery constraint class is re-checked with own exact arithmetic; the bound meets the makespan.bound 11 meets makespan 11M1M2M3J1 T1[2,5]J1 T2[5,7]J1 T3[7,9]J2 T1[0,2]J2 T2[2,3]J2 T3[7,11]J3 T1[0,4]J3 T2[4,7]makespan 11011time

Provable makespan

The schedule is provably correct and provably shortest three ways: re-verified by our own arithmetic, matched by the solver's own best-bound proof, and matched again by the exhaustive ordering search above. Why: three independent computations landing on the same number is a certificate, not a claim that any one of them alone was the only way to know.

three-way agreement, not just what the solver said\text{three-way agreement, not just what the solver said}
Re-verified scheduleEvery constraint class is re-checked with own exact arithmetic; the bound meets the makespan.bound 11 meets makespan 11M1M2M3J1 T1[2,5]J1 T2[5,7]J1 T3[7,9]J2 T1[0,2]J2 T2[2,3]J2 T3[7,11]J3 T1[0,4]J3 T2[4,7]makespan 11011time

Diagram note

The bars are the same decoded schedule, J1 through J3 across machines M1 through M3; the loads and job lengths are recomputed from the job data on every build, and the lower bound and exhaustive-search result are recomputed from that same data, not from the schedule itself. Pixel positions are rounded for layout; every number shown is exact.

recomputed on every build\text{recomputed on every build}
Re-verified scheduleEvery constraint class is re-checked with own exact arithmetic; the bound meets the makespan.bound 11 meets makespan 11M1M2M3J1 T1[2,5]J1 T2[5,7]J1 T3[7,9]J2 T1[0,2]J2 T2[2,3]J2 T3[7,11]J3 T1[0,4]J3 T2[4,7]makespan 11011time