Job sequencing is in NP #
The bridge between the kernel of DescriptiveComplexity.Problems.JobSequencing.Kernel
and what it means: DescriptiveComplexity.realize_jobSequencingKernel reads each
clause back as a statement about the guessed relations, so that the two
directions of the Σ₁ definition can be argued with
DescriptiveComplexity.chain_sound and DescriptiveComplexity.exists_chain for the
walks and DescriptiveComplexity.binNum_lt_iff for the two comparisons.
Dependency graph
Reading the comparisons back #
The comparison clauses say what they should: the shape the kernel
writes – two wide positions, the second strictly above the first written out
coordinate by coordinate – is DescriptiveComplexity.binNum_lt_iff on the wide
positions. Both comparisons of the kernel go through this, the deadline
against a completion time and the bound against the penalty total.
Dependency graph
Membership #
Job sequencing is Σ₁-definable: guess the schedule, the late jobs,
the completion times along the schedule and the penalty total of the late
jobs, and check first-order that both are ripple-carry additions, that a job
is late exactly when its completion time exceeds its deadline, and that the
penalty total does not exceed the bound. Since NP is defined as
Σ₁-definability, this is the membership half of job sequencing.