Unrelated-Machines Load-Balancing Model and Algorithm
Definitionpd_unrelated_machinesThis module formalizes the normalized online load-balancing problem on unrelated machines and the Buchbinder–Naor primal–dual algorithm for it.
A normalized instance has machines, jobs arriving in this order, and a nonnegative normalized load for every job–machine pair; machine is eligible for job exactly when . The associated covering primal minimizes subject to
and its packing dual maximizes subject to for every job and for every machine . Prefix versions of the program keep only the constraints of the first jobs.
The algorithm is given as an executable causal online process. It initializes every machine weight to ; on arrival of job it declares failure if has no eligible machine or if some current weight exceeds ; otherwise it assigns irrevocably to an eligible machine minimizing (ties broken by machine order), sets and , and updates . Failure is absorbing. The module also defines the assigned normalized load of each machine after any prefix, the predicate that a feasible dual assigns unit mass to every job, and the explicit bound appearing in the guarantee.
These definitions are the shared vocabulary for every theorem of the mission: the feasibility and objective statements refer to the same finite-LP interface, and the algorithmic statements refer to the same causal process.
Formalization Note The doubling wrapper that guesses the optimal makespan is deliberately outside this module; the mission covers the normalized single phase. Eligible pairs form a subtype, so dual vectors have no entries at ineligible pairs, while the algorithm's sparse -updates live in a rectangular array inside the state.
import Definitions.Def_pd_finite_lp
import Definitions.Def_pd_online_trace
import Mathlib.Analysis.SpecialFunctions.Log.Basic
import Mathlib.Tactic.NormNum
open scoped BigOperators
namespace PrimalDual
namespace UnrelatedMachines
noncomputable section
/--
A normalized unrelated-machines load-balancing instance for the
Buchbinder--Naor primal--dual algorithm. Jobs arrive in the order
`0, ..., jobs - 1`; `load i j` is the normalized processing load of job `i`
on machine `j`. The assumption `machines_pos` records that the finite machine
set is nonempty.
The doubling wrapper that guesses the optimum is deliberately outside this
structure: this is the normalized single-phase load-balancing problem.
-/
structure Instance (jobs machines : ℕ) where
machines_pos : 0 < machines
load : Fin jobs → Fin machines → ℝ
load_nonneg : ∀ i j, 0 ≤ load i j
namespace Instance
variable {jobs machines : ℕ}
/-- Machines eligible for job `i`, namely those with normalized load at most one. -/
def eligible (I : Instance jobs machines) (i : Fin jobs) : Finset (Fin machines) :=
Finset.univ.filter fun j ↦ I.load i j ≤ 1
@[simp]
theorem mem_eligible_iff (I : Instance jobs machines) (i : Fin jobs) (j : Fin machines) :
j ∈ I.eligible i ↔ I.load i j ≤ 1 := by
simp [eligible]
/-- A covering constraint is an eligible job--machine pair. -/
abbrev EligiblePair (I : Instance jobs machines) :=
{q : Fin jobs × Fin machines // q.2 ∈ I.eligible q.1}
/-- Eligible constraints belonging to jobs among the first `k` arrivals. -/
abbrev EligiblePairThrough (I : Instance jobs machines) (k : ℕ) :=
{q : I.EligiblePair // q.1.1.1 < k}
/-- The primal variables are machine weights `x(j)` and job slacks `z(i)`. -/
abbrev PrimalVar (jobs machines : ℕ) := Sum (Fin machines) (Fin jobs)
/--
The exact finite covering/packing LP for unrelated-machines load balancing:
* the primal minimizes `sum_j x(j) + sum_i z(i)` subject to
`load(i,j) * x(j) + z(i) >= 1` for every eligible pair;
* the dual maximizes the sum of `y(i,j)`, with one capacity constraint per
job and one load constraint per machine.
-/
def lp (I : Instance jobs machines) :
FinitePrimalDual (PrimalVar jobs machines) I.EligiblePair where
coeff v q :=
match v with
| Sum.inl j => if j = q.1.2 then I.load q.1.1 j else 0
| Sum.inr i => if i = q.1.1 then 1 else 0
rhs _ := 1
cost _ := 1
/-- The load-balancing LP is a covering-primal/packing-dual pair. -/
theorem lp_isCoveringPacking (I : Instance jobs machines) : I.lp.IsCoveringPacking where
coeff_nonneg := fun v q ↦ by
rcases v with j | i
· change 0 ≤ (if j = q.1.2 then I.load q.1.1 j else 0)
split
· exact I.load_nonneg _ _
· norm_num
· change 0 ≤ (if i = q.1.1 then 1 else 0)
split <;> norm_num
rhs_nonneg := by
intro q
change 0 ≤ (1 : ℝ)
norm_num
cost_nonneg := by
intro v
change 0 ≤ (1 : ℝ)
norm_num
/--
The prefix LP used at an intermediate arrival. Its constraints are precisely
the eligible pairs whose job index is below `k`; retaining the future `z`
coordinates is harmless because the algorithm keeps them at zero.
-/
def lpThrough (I : Instance jobs machines) (k : ℕ) :
FinitePrimalDual (PrimalVar jobs machines) (I.EligiblePairThrough k) where
coeff v q :=
match v with
| Sum.inl j => if j = q.1.1.2 then I.load q.1.1.1 j else 0
| Sum.inr i => if i = q.1.1.1 then 1 else 0
rhs _ := 1
cost _ := 1
/-- Every prefix LP inherits the covering/packing nonnegativity data. -/
theorem lpThrough_isCoveringPacking (I : Instance jobs machines) (k : ℕ) :
(I.lpThrough k).IsCoveringPacking where
coeff_nonneg := fun v q ↦ by
rcases v with j | i
· change 0 ≤ (if j = q.1.1.2 then I.load q.1.1.1 j else 0)
split
· exact I.load_nonneg _ _
· norm_num
· change 0 ≤ (if i = q.1.1.1 then 1 else 0)
split <;> norm_num
rhs_nonneg := by
intro q
change 0 ≤ (1 : ℝ)
norm_num
cost_nonneg := by
intro v
change 0 ≤ (1 : ℝ)
norm_num
/--
The complete mutable state of the load-balancing algorithm. `weight` is `x`,
`slack` is `z`, and `dual` is the sparse 0/1 vector `y` produced by assigning
a job. `failedAt` stores the first job at which a phase fails.
-/
structure State (jobs machines : ℕ) where
weight : Fin machines → ℝ
assignment : Fin jobs → Option (Fin machines)
slack : Fin jobs → ℝ
dual : Fin jobs → Fin machines → ℝ
failedAt : Option (Fin jobs)
/-- The tutorial initialization `x(j) = 1 / (2m)`, with all other variables zero. -/
def initialState (_I : Instance jobs machines) : State jobs machines where
weight _ := 1 / (2 * (machines : ℝ))
assignment _ := none
slack _ := 0
dual _ _ := 0
failedAt := none
/-- The first explicit failure condition: the arriving job has no eligible machine. -/
def noEligibleMachine (I : Instance jobs machines) (i : Fin jobs) : Prop :=
I.eligible i = ∅
/-- The second explicit failure condition: some current machine weight exceeds one. -/
def hasOverweightMachine (_I : Instance jobs machines) (s : State jobs machines) : Prop :=
∃ j, 1 < s.weight j
/-- Exactly the disjunction tested in Step (1) of the source algorithm. -/
def failureCondition (I : Instance jobs machines) (s : State jobs machines)
(i : Fin jobs) : Prop :=
I.noEligibleMachine i ∨ I.hasOverweightMachine s
/--
The eligible machine minimizing `load(i,j) * x(j)`. Machines are sorted by
their natural `Fin` order before `argmin`, so ties are broken deterministically.
-/
def chooseMachine (I : Instance jobs machines) (s : State jobs machines)
(i : Fin jobs) : Option (Fin machines) :=
((I.eligible i).sort (· ≤ ·)).argmin fun j ↦ I.load i j * s.weight j
/-- The source predicate characterizing a valid choice, independent of tie-breaking. -/
def IsMinimumChoice (I : Instance jobs machines) (s : State jobs machines)
(i : Fin jobs) (j : Fin machines) : Prop :=
j ∈ I.eligible i ∧
∀ k ∈ I.eligible i, I.load i j * s.weight j ≤ I.load i k * s.weight k
theorem chooseMachine_spec (I : Instance jobs machines)
{s : State jobs machines} {i : Fin jobs} {j : Fin machines}
(h : I.chooseMachine s i = some j) : I.IsMinimumChoice s i j := by
have hjarg : j ∈ ((I.eligible i).sort (· ≤ ·)).argmin
(fun k ↦ I.load i k * s.weight k) := h
constructor
· have hjlist := List.argmin_mem hjarg
exact ((I.eligible i).mem_sort (· ≤ ·)).1 hjlist
· intro k hk
apply List.le_of_mem_argmin (m := j)
· exact ((I.eligible i).mem_sort (· ≤ ·)).2 hk
· exact hjarg
/--
One deterministic transition of the normalized algorithm. A prior failure is
absorbing. Otherwise Step (1) is checked, then the selected machine `ell`
receives the job and the source updates are applied:
`z(i) = 1 - load(i,ell) * x(ell)`, `y(i,ell) = 1`, and
`x(ell) := x(ell) * (1 + load(i,ell) / 2)`.
-/
def step (I : Instance jobs machines) (s : State jobs machines)
(i : Fin jobs) : State jobs machines := by
classical
exact
match s.failedAt with
| some _ => s
| none =>
if I.failureCondition s i then
{ s with failedAt := some i }
else
match I.chooseMachine s i with
| none => { s with failedAt := some i }
| some ell =>
let p := I.load i ell
let oldWeight := s.weight ell
{ weight := Function.update s.weight ell (oldWeight * (1 + p / 2))
assignment := Function.update s.assignment i (some ell)
slack := Function.update s.slack i (1 - p * oldWeight)
dual := Function.update s.dual i (Function.update (s.dual i) ell 1)
failedAt := none }
/--
The load-balancing transition as a reusable causal online process. The decision is
the assigned machine when the arrival succeeds and `none` when the phase has
failed; the detailed first-failure witness remains in the state.
-/
def process (I : Instance jobs machines) :
Online.Process (Fin jobs) (State jobs machines) (Option (Fin machines)) where
initial := I.initialState
step s i :=
let next := I.step s i
(next, next.assignment i)
/-- The arrival list `0, ..., jobs - 1`. -/
def arrivals (_I : Instance jobs machines) : List (Fin jobs) :=
List.ofFn id
/-- State after processing the first `k` arrivals (or after the first earlier failure). -/
def runPrefix (I : Instance jobs machines) (k : ℕ) : State jobs machines :=
I.process.stateAfter (I.arrivals.take k)
/-- Final state after the finite arrival sequence. -/
def finalState (I : Instance jobs machines) : State jobs machines :=
I.runPrefix jobs
/-- The algorithm's phase did not encounter either failure condition. -/
def Succeeded (I : Instance jobs machines) : Prop :=
I.finalState.failedAt = none
/-- Every arriving job received an irrevocable machine assignment. -/
def AssignsAll (I : Instance jobs machines) : Prop :=
∀ i, ∃ j, I.finalState.assignment i = some j
/-- Total normalized load recorded by a state on machine `j`. -/
def stateAssignedLoad (I : Instance jobs machines) (s : State jobs machines)
(j : Fin machines) : ℝ :=
∑ i, if s.assignment i = some j then I.load i j else 0
/-- Normalized load assigned to machine `j` after the first `k` arrivals. -/
def assignedLoadThrough (I : Instance jobs machines) (k : ℕ) (j : Fin machines) : ℝ :=
I.stateAssignedLoad (I.runPrefix k) j
/-- Total normalized load assigned by the final phase state to machine `j`. -/
def assignedLoad (I : Instance jobs machines) (j : Fin machines) : ℝ :=
I.stateAssignedLoad I.finalState j
/-- Turn a state `(x,z)` into the primal vector of `I.lp`. -/
def primalVector (_I : Instance jobs machines) (s : State jobs machines) :
PrimalVar jobs machines → ℝ
| Sum.inl j => s.weight j
| Sum.inr i => s.slack i
/-- Turn the algorithm's rectangular `y` array into the dual vector on eligible pairs. -/
def algorithmDualVector (I : Instance jobs machines) (s : State jobs machines) :
I.EligiblePair → ℝ :=
fun q ↦ s.dual q.1.1 q.1.2
/-- Restrict a full dual vector to the constraints present in prefix `k`. -/
def restrictDual (I : Instance jobs machines) (y : I.EligiblePair → ℝ) (k : ℕ) :
I.EligiblePairThrough k → ℝ :=
fun q ↦ y q.1
/-- The total dual mass placed on eligible machines for one job. -/
def jobDualMass (I : Instance jobs machines) (y : I.EligiblePair → ℝ)
(i : Fin jobs) : ℝ :=
∑ q, if q.1.1 = i then y q else 0
/--
The premise “a feasible dual solution assigning all jobs” used by the
load-balancing guarantee.
The first conjunct uses the shared finite-LP interface; the second says every
job constraint is tight at value one, equivalently giving dual objective
`jobs` in this unit-right-hand-side LP.
-/
def DualAssignsAll (I : Instance jobs machines) (y : I.EligiblePair → ℝ) : Prop :=
I.lp.DualFeasible y ∧ ∀ i, I.jobDualMass y i = 1
/-- Primal feasibility for the shared finite covering LP of the first `k` arrivals. -/
def PrimalFeasibleThrough (I : Instance jobs machines) (k : ℕ)
(s : State jobs machines) : Prop :=
(I.lpThrough k).PrimalFeasible (I.primalVector s)
/--
The shared finite-LP primal objective for prefix `k`. Along `runPrefix k`, all
future slack coordinates remain zero, so this is exactly the source objective
containing the machine weights and the first `k` job slacks.
-/
def primalObjectiveThrough (I : Instance jobs machines) (k : ℕ)
(s : State jobs machines) : ℝ :=
(I.lpThrough k).primalObjective (I.primalVector s)
/-- Exact logarithmic bound proved in the source, replacing its asymptotic notation. -/
def logarithmicLoadBound (_I : Instance jobs machines) : ℝ :=
Real.log (3 * (machines : ℝ)) / Real.log ((3 : ℝ) / 2)
end Instance
end
end UnrelatedMachines
end PrimalDual
Read-back
What the Lean code literally says, in plain math · gpt-5
-
Instance. For explicit natural numbers and , anInstance n mconsists of a proof that , a total function , and a proof that for every job and machine . Thus may be zero, in which case the load function and its nonnegativity condition have empty job domain; an inhabitant cannot exist when because it would contain a proof of . No upper bound on a load is included. -
eligible. For implicit natural numbers , an instance with and nonnegative total load function , and a job ,eligible I iis the finite set . Because the instance separately guarantees , these are exactly the machines with ; the set may be empty despite . If , there is no value of at which to evaluate this function. -
mem_eligible_iff. For implicit natural numbers , every instance with and nonnegative loads, every , and every , the theorem asserts the exact equivalence , with no additional hypothesis. An instantiation has no possible job argument when , and no instance exists when . -
EligiblePair. For implicit natural numbers and an instance ,I.EligiblePairis the subtype of pairs equipped with a proof that , equivalently a proof that . The type is empty when and may also be empty when every job-machine load exceeds ; the instance itself forces . -
EligiblePairThrough. For implicit natural numbers , an instance , and any natural number ,I.EligiblePairThrough kis the subtype of eligible pairs additionally equipped with the condition that the natural value of is less than . It is empty for or ; if , it contains every eligible pair, and values of beyond introduce no extra jobs because job indices remain in . -
PrimalVar. For explicit natural numbers ,PrimalVar n mis the disjoint sum : every value is either a machine-tagged index or a job-tagged index. This declaration has no positivity assumption; if the machine side is empty, if the job side is empty, and if both are zero the whole type is empty. -
lp. For implicit natural numbers and an instance with loads and ,I.lpis finite primal-dual data whose primal-coordinate type is and whose constraint/dual-coordinate type is the eligible pairs . For a constraint , the coefficient of a machine coordinate is when and otherwise, while the coefficient of a job coordinate is when and otherwise; every right-hand side and every cost is . Under the imported finite-LP operations, this yields primal objective , primal constraint for each , dual objective , machine constraint , and job constraint when the corresponding feasibility predicates are invoked; the declaration itself supplies the coefficients, right sides, and costs rather than asserting feasibility. If , or if there are no eligible pairs, the constraint and dual-variable type is empty, while the machine coordinates and their unit costs remain. -
lp_isCoveringPacking. For implicit natural numbers and every instance , the theorem supplies the importedIsCoveringPackingproposition forI.lp: for every primal coordinate and eligible constraint , its coefficient is nonnegative; every eligible constraint has nonnegative right-hand side; and every primal coordinate has nonnegative cost. Concretely, the coefficients are either a nonnegative load , , or , and all right sides and costs are . If the eligible-pair type is empty, the coefficient and right-side assertions are vacuous; if , the remaining machine-coordinate cost assertions still say . It asserts no feasibility, optimality, or duality conclusion. -
lpThrough. For implicit natural numbers , an instance , and any ,I.lpThrough khas all machine and all job primal coordinates but only constraints satisfying both and . At such a constraint, a machine coordinate has coefficient if and otherwise, a job coordinate has coefficient if and otherwise, and every right-hand side and every cost is . Hence its primal constraints are only for eligible pairs with , while its objective still includes every machine coordinate and every job coordinate. For there are no constraints; for this has all eligible constraints; is silently truncated by the finite job type, and gives no constraints. -
lpThrough_isCoveringPacking. For implicit natural numbers , every instance , and every unrestricted , the theorem asserts that every coefficient, right-hand side, and cost inI.lpThrough kis nonnegative. The coefficients are precisely nonnegative loads, , or , and every right side and cost is . When , , or the relevant jobs have no eligible pairs, the coefficient and right-side portions may be vacuous, while nonnegativity of the costs of all machine and job coordinates remains; no feasibility or optimization assertion is included. -
State. For explicit natural numbers , aState n mcontains total functions , , , and , together with . No invariant requires weights, slacks, or dual values to be nonnegative, assignments to be eligible, orfailedAtto be the first failure. The functions also have values for every unprocessed index whenever their domains are nonempty. If , all job-indexed functions have empty domain andfailedAtcan only benone; if , weights and each dual row have empty domain and every assignment must benone. -
initialState. For implicit natural numbers and an explicit instance argument —whose load data are unused but whose field proves —I.initialStateassigns every machine weight the value , every job assignmentnone, every job slack , every job-machine dual entry , andfailedAt = none. Real division is a total operation, and here the denominator is nonzero because . If , the assignment, slack, and dual clauses are functions on an empty job domain. -
noEligibleMachine. For implicit natural numbers , an instance , and a job ,I.noEligibleMachine iis the proposition that , equivalently that no machine has load at most for job . The instance guarantees , so this can hold even though machines exist. If , there is no job argument at which the predicate can be formed. -
hasOverweightMachine. For implicit natural numbers , an instance argument and an arbitrary state ,I.hasOverweightMachine sis the proposition . The load, assignments, slack, dual array, and failure marker are ignored; the instance argument contributes only its indexing and the fact . No reachability or nonnegativity assumption is imposed on . -
failureCondition. For implicit natural numbers , an instance , arbitrary state , and job ,I.failureCondition s iis exactly the inclusive disjunction that either no satisfies , or there exists a machine with . It does not inspects.failedAt, assignments, slacks, or dual values and adds no other failure case. -
chooseMachine. For implicit natural numbers , an instance , arbitrary state , and job ,I.chooseMachine s isorts the finite eligible set by the natural order on and applies listargminto the real-valued score . It returnsnonewhen the eligible list is empty and otherwise returns the deterministic element selected as a minimum from that ordered list; ties require no uniqueness and are resolved by the library operation on the sorted list. The definition does not inspectfailedAtand assumes no sign condition on the arbitrary state's weights. -
IsMinimumChoice. For implicit natural numbers , an instance , arbitrary state , job , and machine ,I.IsMinimumChoice s i jis the conjunction and, for every machine , the implication . It asserts eligibility and weak minimality only; it does not assert uniqueness, a particular tie-breaking outcome, absence of failure, or that was actually returned bychooseMachine. -
chooseMachine_spec. For implicit natural numbers , every instance , every implicit arbitrary state , job , and machine , and the hypothesisI.chooseMachine s i = some j, the theorem concludes that and that for every with . If the eligible set is empty, the hypothesis cannot hold. The theorem has no assumption abouts.failedAt, reachability, weight signs, uniqueness, or tie order, and it asserts only this one implication. -
step. For implicit natural numbers , an instance , any state , and any job ,I.step s iis a total deterministic state transition with these exact branches. Ifs.failedAt = some ffor any job , it returns unchanged without testing . Ifs.failedAt = noneand either has no machine with or some current weight exceeds , it changes onlyfailedAttosome i. Otherwise it invokeschooseMachine; if that unexpectedly returnsnone, it again changes onlyfailedAttosome i. If it returnssome ell, writing and , the result changes only machine 's weight to , job 's assignment tosome ell, job 's slack to , and dual entry to , preserves every other weight, assignment, slack, and dual entry—including all other entries in row —and setsfailedAttonone. Because the input state and arrival are arbitrary, repeated or out-of-order calls can overwrite the named assignment and slack, and no invariant on prior state values is assumed; when there is no job value with which to call the transition. -
process. For implicit natural numbers and an instance ,I.processis an online-process record with request type , state typeState n m, and decision type . Its designated initial state isI.initialState; on any current state and request , it computes and returns the pair . Thus the emitted decision is the post-transition assignment entry, even on a failure or already-failed arbitrary state, so it is not definitionally forced to benoneif that state already storedsome j. The step is total for every state and valid request and can be fed repeated or out-of-order request lists; if , the request type has no values. -
arrivals. For implicit natural numbers and an explicit instance argument that is otherwise unused,I.arrivalsisList.ofFn id, namely the length- list of all elements of in order . It is empty when ; the instance guarantees but neither its loads nor its machines affect the list. -
runPrefix. For implicit natural numbers , an instance , and any ,I.runPrefix kstarts atI.initialStateand processes, from left to right, the first entries of the list , retaining the state component of eachI.processtransition. Because listtaketruncates, exactly the first arrivals are used: returns the initial state, and every processes the whole list. If a transition records a failure, every subsequent transition returns that state unchanged because failure is absorbing. When , every prefix is the initial state. -
finalState. For implicit natural numbers and an instance ,I.finalStateisI.runPrefix n, hence the state obtained from the designated initial state after processing the entire list . If a job records a failure, this is the unchanged absorbing state from that first failure onward; if , it is exactly the initial state. -
Succeeded. For implicit natural numbers and an instance ,I.Succeededis solely the propositionI.finalState.failedAt = none. It adds no explicit claim about assignments, eligibility, primal or dual feasibility, weights, or loads. When , the final state is initial and this equality holds. -
AssignsAll. For implicit natural numbers and an instance ,I.AssignsAllis the proposition that for every there exists a such thatI.finalState.assignment i = some j. It does not separately requireSucceeded, eligibility of the stored machine, or any load bound. The assertion is vacuously true when ; an instance always has . -
stateAssignedLoad. For implicit natural numbers , an instance , an arbitrary state , and a machine ,I.stateAssignedLoad s jis the finite sum . It ignores weights, slacks, dual values, andfailedAt, and it neither requires to be reachable nor checks that stored assignments are eligible. The empty-job sum is . -
assignedLoadThrough. For implicit natural numbers , an instance , any , and a machine ,I.assignedLoadThrough k jis , whererunPrefix kprocesses only the first canonical arrivals and freezes at any earlier failure. The sum itself ranges over all jobs, including indices not below , and relies on the stored state values to select terms. It is for and for , and for every it uses the final state. -
assignedLoad. For implicit natural numbers , an instance , and a machine ,I.assignedLoad jis . If the canonical run fails, assignments stored before the absorbing failure still contribute and unassigned jobs do not; no success or eligibility premise is imposed. The value is when . -
primalVector. For implicit natural numbers , an explicit instance argument whose data are otherwise unused, and any state ,I.primalVector sis the total real vector on that sends a machine-tagged coordinate to and a job-tagged coordinate to . Assignments, dual entries, andfailedAtare discarded, and no nonnegativity or reachability property is asserted. If , there are no job-tagged coordinates. -
algorithmDualVector. For implicit natural numbers , an instance , and any state ,I.algorithmDualVector sis the total real function on eligible pairs: at an eligible pair , including its proof that , it returns the rectangular-array entry . The eligibility proof does not affect the value, ineligible array entries are absent from the output domain rather than set to zero, and no sign, feasibility, assignment, or reachability condition is imposed. The domain is empty when or when no pair is eligible. -
restrictDual. For implicit natural numbers , an instance , any full function from eligible pairs to , and any ,I.restrictDual y kis the function on eligible pairs with that returns exactly after forgetting the additional prefix proof. It changes no values and imposes no feasibility condition. Its domain is empty for ; for it contains every eligible pair, and makes both domains empty. -
jobDualMass. For implicit natural numbers , an instance , any real function on eligible pairs, and a job ,I.jobDualMass y iis the sum over every eligible pair of when and otherwise, equivalently . No nonnegativity or feasibility assumption is made. If job has no eligible machine, the value is the empty sum ; if , there is no job argument. -
DualAssignsAll. For implicit natural numbers , an instance , and a real function on eligible pairs ,I.DualAssignsAll yis the conjunction of the fully expanded conditions: for every ; for every machine ; for every job ; and, additionally, for every job . There are no values for ineligible pairs. If any existing job has no eligible machine, its required equality is the impossible equation ; if , the eligible domain and all job conditions are empty, while every machine condition is , so the predicate holds for the unique empty-domain function. -
PrimalFeasibleThrough. For implicit natural numbers , an instance , any , and any state ,I.PrimalFeasibleThrough k sis exactly the conjunction that for every machine , for every job , and for every pair with and . All job slacks, including those whose indices are not below , are subject to nonnegativity, while only prefix eligible pairs generate covering constraints; assignments, dual entries, and failure status are ignored. For the covering constraints are vacuous but coordinate nonnegativity remains; for all eligible constraints are included, and when only machine-weight nonnegativity remains. -
primalObjectiveThrough. For implicit natural numbers , an instance , any , and any state ,I.primalObjectiveThrough k sis the imported finite-LP objective because every machine and job coordinate has unit cost. Despite the parameter , the value includes every job slack and is definitionally independent of which prefix constraints exist; no feasibility, nonnegativity, reachability, or success assumption is imposed. For the job sum is , and the same objective is used even at or . -
logarithmicLoadBound. For implicit natural numbers and an explicit instance argument whose loads and job count are unused,I.logarithmicLoadBoundis the exact real number , with coerced from to . The instance guarantees , so , and is nonzero; real logarithm and division are total operations in any case. The value has no rounding, ceiling, asymptotic qualification, or dependence on , so leaves it unchanged.
Confirmed by the mission captain (proposal self-audit).