Every k-server algorithm is dominated by a lazy simple one
ProvedKServer.exists_lazy_injective_algorithmEvery deterministic online -server algorithm whose initial configuration places the servers on distinct points is dominated by one that is lazy and simple: starting from the same configuration and never paying more on any request sequence, the dominating algorithm keeps its servers on distinct points at all times, moves nothing when a request is already covered, and otherwise moves exactly one server, directly onto the request.
Role
This strengthens the classical laziness reduction (exists_lazy_algorithm) by additionally maintaining injectivity of the configurations. On a space of points, a simple configuration leaves exactly one point uncovered — the hole — and a lazy simple algorithm moves precisely when the hole is requested, paying the distance the hole travels. This makes the -server problem on points literally the evader problem (metrical service systems), which is the reduction underlying the Bubeck–Coester–Rabani randomized lower bound.
Proof idea
The dominating algorithm simulates while maintaining the potential the minimum-cost perfect matching between its configuration and 's. On a covered request it stays (and grows by at most 's step cost, since the matching cost is -Lipschitz). On an uncovered request it moves the server matched to a server of standing on ; the move costs exactly the matched edge, which the new matching saves, so the step cost plus the new potential is at most the old potential plus 's step cost. Telescoping with dominates the total cost. Injectivity is preserved because the moved server lands on a previously uncovered point.
Formalization note
Laziness is expressed by the last two conjuncts: no motion on covered requests, and a one-server update otherwise. The minimum-cost matching ranges over permutations of Fin k.
import Mathlib import Definitions.Def_KServer_model
namespace KServer
theorem exists_lazy_injective_algorithm (k : ℕ) (M : Type*) [MetricSpace M]
(A : OnlineAlgorithm k M) (hinj : Function.Injective (A.conf [])) :
∃ B : OnlineAlgorithm k M,
B.conf [] = A.conf [] ∧
(∀ σ : List M, B.cost σ ≤ A.cost σ) ∧
(∀ l : List M, Function.Injective (B.conf l)) ∧
(∀ (l : List M) (r : M), (∃ i, B.conf l i = r) → B.conf (l ++ [r]) = B.conf l) ∧
(∀ (l : List M) (r : M), ∃ i : Fin k, B.conf (l ++ [r]) = Function.update (B.conf l) i r) := by sorry
end KServer