§3 Sequencing Algorithm, p. 545 — an optimal sequence of the remaining jobs followed by is optimal
ProvedLawlerPrec.MinMax.remove_last_reductionLet be a nonempty job set with non-negative processing times and monotone nondecreasing cost functions , the jobs of not required to precede any others, , and with . Suppose is nonempty and is a minmax optimal sequence of the reduced problem on . Then
This is the step of Lawler's algorithm "having removed from the problem, one finds a job which can be placed last among the remaining jobs and second-to-last in the complete sequence": solving the reduced problem and appending solves the original one. The case is trivial and excluded by the nonemptiness hypothesis.
Formalization Note The reduced problem keeps the same processing times, costs and precedence relation, restricted to (J.erase k). Non-negative processing times are an added, disclosed hypothesis.
import Mathlib import Definitions.Def_LawlerPrec_MinMax_IsMinmaxOptimal import Definitions.Def_LawlerPrec_MinMax_lastEligible
namespace LawlerPrec.MinMax
/-- §3 Sequencing Algorithm, p. 545, first paragraph: the reduction step. Let `k ∈ S` minimize
`c_j(T)` over `S`, `T = ∑_{j ∈ J} a_j`. If `l'` is a minmax optimal sequence of the remaining
jobs `J \ {k}` (assumed nonempty; the case `J = {k}` is trivial), then placing `k` after it gives
a minmax optimal sequence `l' ++ [k]` of `J`. -/
theorem remove_last_reduction {ι : Type*} [DecidableEq ι] (a : ι → ℝ) (c : ι → ℝ → ℝ)
(prec : ι → ι → Prop) (J : Finset ι) (hJ : J.Nonempty) (ha : ∀ j ∈ J, 0 ≤ a j)
(hc : ∀ j ∈ J, Monotone (c j)) (k : ι) (hk : k ∈ lastEligible prec J)
(hmin : ∀ j ∈ lastEligible prec J, c k (∑ i ∈ J, a i) ≤ c j (∑ i ∈ J, a i))
(hJ' : (J.erase k).Nonempty) (l' : List ι)
(hl' : IsMinmaxOptimal a c prec (J.erase k) hJ' l') :
IsMinmaxOptimal a c prec J hJ (l' ++ [k]) := by sorry
end LawlerPrec.MinMax
Confirmed by the mission captain (proposal self-audit).
Confirmed by the moderator at approval.